Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- typedef long long int ll;
- int main()
- {
- int n;
- scanf("%d",&n);
- ll arr[n];
- for(int i = 0 ; i < n ; i ++){
- scanf("%lld",&arr[i]);
- }
- ll lds[n];
- ll sum[n];
- int len = 0;
- lds[0] = arr[n-1];
- sum[0] = arr[n-1];
- len = 1;
- for(int i = n - 2 ; i >= 0 ; i --){
- int targ = -1;
- /* for(int j = 0 ; j < len ; j ++){ //brute force
- if(lds[j] >= arr[i]){
- targ = j;
- }
- }*/
- int l = 0 , r = len - 1;
- while(l <= r){
- int m = (l+r)/2;
- if(lds[m] >= arr[i]){
- targ = m;
- l = m + 1;
- }
- else{
- r = m - 1;
- }
- }
- // printf("i #%d : targ %d\n",i,targ);
- lds[targ+1] = arr[i];
- sum[targ+1] = (targ == -1 ? 0 : sum[targ]) + arr[i];
- if(targ+2 > len)len = targ+2;
- }
- printf("%d %lld",len,sum[len-1]);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement