Advertisement
SuitNdtie

Deja vu

May 25th, 2019
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.79 KB | None | 0 0
  1. #include<stdio.h>
  2. typedef long long int ll;
  3.  
  4. int main()
  5. {
  6.     int n;
  7.     scanf("%d",&n);
  8.    
  9.     ll arr[n];
  10.     for(int i = 0 ; i < n ; i ++){
  11.         scanf("%lld",&arr[i]);
  12.     }
  13.    
  14.    
  15.     ll lds[n];
  16.     ll sum[n];
  17.     int len = 0;
  18.    
  19.     lds[0] = arr[n-1];
  20.     sum[0] = arr[n-1];
  21.     len = 1;
  22.     for(int i = n - 2 ; i >= 0 ; i --){
  23.    
  24.         int targ = -1;
  25.     /*  for(int j = 0 ; j < len ; j ++){ //brute force
  26.             if(lds[j] >= arr[i]){
  27.                 targ = j;
  28.             }
  29.         }*/
  30.         int l = 0 , r = len - 1;
  31.         while(l <= r){
  32.             int m = (l+r)/2;
  33.             if(lds[m] >= arr[i]){
  34.                 targ = m;
  35.                 l = m + 1;
  36.             }
  37.             else{
  38.                 r = m - 1;
  39.             }
  40.         }
  41.     //  printf("i #%d : targ %d\n",i,targ);
  42.         lds[targ+1] = arr[i];
  43.         sum[targ+1] = (targ == -1 ? 0 : sum[targ]) + arr[i];
  44.         if(targ+2 > len)len = targ+2;
  45.     }
  46.     printf("%d %lld",len,sum[len-1]);
  47.     return 0;
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement