SuitNdtie

Tree O(nlogn)

Apr 23rd, 2019
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.59 KB | None | 0 0
  1. #include<stdio.h>
  2.  
  3. int main()
  4. {
  5.     int n;
  6.     scanf("%d",&n);
  7.     int arr[n+1];
  8.     int lis[n+1];
  9.     int ans = 1;
  10.     for(int i = 1 ; i <= n ; i ++){
  11.         scanf("%d",&arr[i]);
  12.     }
  13.     lis[1] = arr[1];
  14.     for(int i = 2 ; i <= n ; i++){
  15.         if(arr[i] <= lis[1]){
  16.             lis[1] = arr[i];
  17.         }
  18.         else if(arr[i] > lis[ans]){
  19.             lis[++ans] = arr[i];
  20.         }
  21.         else{
  22.             int l = 1 , r = ans - 1;
  23.             int pos = 1;
  24.             while(l <= r){
  25.                 int m = (l+r)/2;
  26.                 if(lis[m] < arr[i]){
  27.                     pos = m;
  28.                     l = m + 1;
  29.                 }
  30.                 else{
  31.                     r = m - 1;
  32.                 }
  33.             }
  34.             lis[pos+1] = arr[i];
  35.         }
  36.     }
  37.     printf("%d",ans);
  38.     return 0;
  39. }
Advertisement
Add Comment
Please, Sign In to add comment