fork download
  1. #include <bits/stdc++.h>
  2.  
  3. int arr[1000005],result[1000005] = {0},mid;
  4.  
  5. int call(int low, int high,int num) {
  6.  
  7. if( num >= result[high] ) {
  8. return high + 1;
  9. }
  10.  
  11. while( low < high ) {
  12. mid = ( low + high ) /2 ;
  13.  
  14. if(num >= result[mid] && num < result[mid + 1]) {
  15. return mid + 1;
  16. }
  17.  
  18. else if(num >= result[mid]) {
  19. low = mid;
  20. }
  21.  
  22. else {
  23. high = mid;
  24. }
  25. }
  26.  
  27. if(low == high) {
  28. if(num < arr[low]) {
  29. return low;
  30. }
  31.  
  32. else {
  33. return low + 1;
  34. }
  35. }
  36. return 0;
  37. }
  38.  
  39. int main() {
  40. int n,i,j,k,index;
  41. scanf("%i",&n);
  42.  
  43. for(i=1; i<=n; i++) {
  44. scanf("%i",&arr[i]);
  45. }
  46.  
  47. result[1] = arr[1];
  48. int max = 1;
  49.  
  50. for(i=2; i<=n; i++) {
  51. index = call(1,max,arr[i]);
  52. result[index] = arr[i];
  53. if(max < index) {
  54. max = index;
  55. }
  56. }
  57.  
  58. printf("%i",n - max);
  59.  
  60. return 0;
  61. }
  62.  
Success #stdin #stdout 0s 10912KB
stdin
6
1
0
3
5
2
7
stdout
2