Submission #599504


Source Code Expand

#include <string>
#include <vector>
#include <map>
#include <iostream>
#include <set>
#include <list>
#include <cmath>
#include <queue>
#include <stack>
#include <cstdio>
#include <cmath>
#include <cctype>
#include <climits>
#include <complex>
#include <cstdlib>
#include <cstring>
#include <numeric>
#include <sstream>
#include <algorithm>
#include <functional>
 
using namespace std;
long long int A[100010];
long long int dp[100010][3];
const long long INF=1e18;
struct segtree{
  long long val[400005];
  int n;
  void init(int n_){
    n=1;
    while(n<n_) n<<=1;
    for(int i=0;i<2*n;++i) val[i]=-INF;
  }
  void set(int k,long long a){
    k+=n-1;
    val[k]=a;
    while(k){
      k=(k-1)/2;
      val[k]=max(val[k*2+1],val[k*2+2]);
    }
  }
  long long query(int a,int b,int i,int l,int r){
    if(a<=l && r<=b) return val[i];
    if(b<=l || r<=a) return -INF;
    int md=(l+r)>>1;
    return max(query(a,b,i*2+1,l,md),query(a,b,i*2+2,md,r));
  }
};

segtree hill,valley;

int zip[100005];
int main(){
  int N;
  cin>>N;
  for(int i=0;i<N;i++){
    cin>>A[i];
    zip[i]=A[i];
  }
  sort(zip,zip+N);
  int zn=unique(zip,zip+N)-zip;
  for(int i=0;i<N;++i) A[i]=lower_bound(zip,zip+zn,A[i])-zip;

  long long ans=0;
  hill.init(zn);
  valley.init(zn);
  for(int i=0;i<N;i++){
    dp[i][0]=hill.query(A[i]+1,zn,0,0,hill.n)-zip[A[i]];//valley
    dp[i][1]=valley.query(0,A[i],0,0,valley.n)+zip[A[i]];//hill

    dp[i][0]=max(0ll,dp[i][0]);
    dp[i][1]=max(0ll,dp[i][1]);

    ans=max({ans,dp[i][0],dp[i][1]});

    hill.set(A[i],dp[i][1]+zip[A[i]]);
    valley.set(A[i],dp[i][0]-zip[A[i]]);
  }
  cout<<ans<<endl;
  return 0;
}

Submission Info

Submission Time
Task G - Good Sequence
User zanzibar
Language C++11 (GCC 4.9.2)
Score 100
Code Size 1715 Byte
Status AC
Exec Time 223 ms
Memory 8360 KiB

Judge Result

Set Name Sample Subtask1 Subtask2
Score / Max Score 0 / 0 20 / 20 80 / 80
Status
AC × 2
AC × 12
AC × 26
Set Name Test Cases
Sample sample-01.txt, sample-02.txt
Subtask1 sample-01.txt, sample-02.txt, 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt
Subtask2 sample-01.txt, sample-02.txt, 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 02-01.txt, 02-02.txt, 02-03.txt, 02-04.txt, 02-05.txt, 02-06.txt, 02-07.txt, 02-08.txt, 02-09.txt, 02-10.txt, 02-11.txt, 02-12.txt, 02-13.txt, 02-14.txt
Case Name Status Exec Time Memory
01-01.txt AC 24 ms 928 KiB
01-02.txt AC 26 ms 924 KiB
01-03.txt AC 23 ms 920 KiB
01-04.txt AC 25 ms 804 KiB
01-05.txt AC 27 ms 928 KiB
01-06.txt AC 27 ms 800 KiB
01-07.txt AC 25 ms 800 KiB
01-08.txt AC 28 ms 804 KiB
01-09.txt AC 27 ms 928 KiB
01-10.txt AC 27 ms 804 KiB
02-01.txt AC 43 ms 1564 KiB
02-02.txt AC 85 ms 4008 KiB
02-03.txt AC 191 ms 7768 KiB
02-04.txt AC 223 ms 8348 KiB
02-05.txt AC 223 ms 8356 KiB
02-06.txt AC 219 ms 8356 KiB
02-07.txt AC 221 ms 8352 KiB
02-08.txt AC 218 ms 8352 KiB
02-09.txt AC 221 ms 8360 KiB
02-10.txt AC 158 ms 8292 KiB
02-11.txt AC 182 ms 8360 KiB
02-12.txt AC 108 ms 4252 KiB
02-13.txt AC 89 ms 4256 KiB
02-14.txt AC 90 ms 4268 KiB
sample-01.txt AC 24 ms 796 KiB
sample-02.txt AC 24 ms 804 KiB