Guest User

Untitled

a guest
Dec 7th, 2014
219
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.94 KB | None | 0 0
  1. #include <cstdio>
  2. #include <cstring>
  3. #include <cstdlib>
  4. #define MAXN 200005
  5. #define MYINF 1000000000
  6.  
  7. int main ()
  8. {
  9.     int N;
  10.     static int data[MAXN];
  11.     scanf("%d",&N);
  12.     int i;
  13.     for (i = 0; i < N; i++) scanf("%d",&(data[i]));
  14.     static int a[MAXN];
  15.     static int b[MAXN];
  16.     a[0] = -MYINF; b[0] = MYINF;
  17.     for (i = 1; i <= N; i++) { a[i] = MYINF; b[i] = -MYINF; }
  18.     int l, r, c;
  19.     for (i = 0; i < N; i++)
  20.     {
  21.         l = 1; r = N;
  22.         while (r > l)
  23.         {
  24.             c = (l+r) / 2;
  25.             if (a[c] > data[i]) r = c;
  26.             else l = c+1;
  27.         }
  28.         a[l] = data[i];
  29.     }
  30.     for (i = 0; i < N; i++)
  31.     {
  32.         l = 1; r = N;
  33.         while (r > l)
  34.         {
  35.             c = (l+r) / 2;
  36.             if (b[c] < data[i]) r = c;
  37.             else l = c+1;
  38.         }
  39.         b[l] = data[i];
  40.     }
  41.     l = 0; r = N;
  42.     while (r > l)
  43.     {
  44.         c = (l+r+1)/2;
  45.         char isOK = 0;
  46.         for (i = 0; i <= c; i++)
  47.         {
  48.             if (a[i] < b[c-i])
  49.             {
  50.                 isOK = 1;
  51.                 break;
  52.             }
  53.         }
  54.         if (isOK) l = c;
  55.         else r = c-1;
  56.     }
  57.     printf("%d\n",l);
  58.     return 0;
  59. }
Advertisement
Add Comment
Please, Sign In to add comment