Advertisement
a53

inserari

a53
Oct 22nd, 2017
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.00 KB | None | 0 0
  1. #include <iostream>
  2. #define nmax 100002
  3. using namespace std;
  4. int a[nmax],lis[nmax],n,k; /// lis[i]=capatul minim al unui subsir de lungime i
  5.  
  6. void Citire()
  7. {
  8. cin>>n;
  9. for(int i=1;i<=n;++i)
  10. cin>>a[i];
  11. }
  12.  
  13. int CautBin(int x) /// caut in lis[1..k] cea mai din stanga pozitie m cu x <= lis[m]
  14. {
  15. int st,dr,sol,m;
  16. st=1;dr=k;
  17. sol=k;
  18. while(st<=dr)
  19. {
  20. m=(st+dr)/2;
  21. if(x<=lis[m])
  22. sol=m,dr=m-1;
  23. else
  24. st=m+1;
  25. }
  26. return sol;
  27. }
  28.  
  29. int LIS()
  30. {
  31. int x,p;
  32. lis[1]=a[1];
  33. k=1;
  34. for(int i=2;i<=n;++i)
  35. {
  36. x=a[i];
  37. if(x>lis[k])
  38. lis[++k]=x;
  39. else
  40. if(x<=lis[1])
  41. lis[1] = x;
  42. else /// caut in lis[1..k] cea mai din stanga pozitie p cu x <= lis[p]
  43. p=CautBin(x),lis[p]=x;
  44. }
  45. return k;
  46. }
  47.  
  48. void Afisare()
  49. {
  50. int L=LIS();
  51. cout<<n-L<<'\n';
  52. }
  53.  
  54. int main()
  55. {
  56. Citire();
  57. Afisare();
  58. return 0;
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement