Submission #681688

#TimeUsernameProblemLanguageResultExecution timeMemory
681688edogawa_somethingTriple Jump (JOI19_jumps)C++17
19 / 100
3044 ms148172 KiB
#include<bits/stdc++.h> #include<ext/pb_ds/assoc_container.hpp> #include<ext/pb_ds/tree_policy.hpp> using namespace std; using namespace __gnu_pbds; typedef long long ll; typedef long double ld; typedef string st; typedef bool bl; typedef vector<ll> vii; typedef pair<ll,ll> pii; typedef vector<pii> vpi; #define pu push #define ordered_set tree<ll,null_type,less<ll>,rb_tree_tag,tree_order_statistics_node_update> #define fast ios_base::sync_with_stdio(0);cin.tie(); #define test ll qqqqq;cin>>qqqqq;while(qqqqq--) #define F first #define S second #define forn(i,n) for(ll i=0;i<n;i++) #define forx(i,j,n) for(ll i=j;i<n;i++) #define pb push_back #define pob pop_back #define all(v) v.begin(),v.end() #define lb lower_bound #define ub upper_bound #define pof pop_front #define pow powww #define prtll(x) printf("%lld",x) #define prtld(x) printf("%Lf",x) #define prtst(x) printf("%s",x) #define prtch(x) printf("%c",x) #define measure chrono::high_resolution_clock::now() const ll dx[]{1,0,-1,0}; const ll dy[]{0,-1,0,1}; const ll inf=2e18; //const ll mod=1e9+7; const ll LM=1e7+2; const ll M=3e5+10; const ll MM=5002; const ll MMM=101; const ld pi=acos(-1); const ll mod=998244353; ll pow(ll r,ll to,ll m=mod){ ll res=1; while(to){ if((to&1)) res*=r,res%=m; r*=r,r%=m; to=(to>>1); } return res; } struct seg{ ll sz=1; vii mx; void init(ll x){ while(sz<x) sz=(sz<<1); mx.resize((sz<<1)); } void update(ll i,ll v,ll x,ll lx,ll rx){ if(rx-lx==1){ mx[x]=v; return; } ll mid=((lx+rx)>>1); if(i<mid) update(i,v,x*2+1,lx,mid); else update(i,v,x*2+2,mid,rx); mx[x]=max(mx[x*2+1],mx[x*2+2]); } ll query(ll l,ll r,ll x,ll lx,ll rx){ if(rx<=r&&lx>=l) return mx[x]; else if(rx<=l||lx>=r) return 0; else{ ll mid=((lx+rx)>>1); return max(query(l,r,x*2+1,lx,mid),query(l,r,x*2+2,mid,rx)); } } }; ll n,a[M],dp[MM][MM]; seg s; ll DP(ll l,ll r){ if(r-l<=1) return 0; if(dp[l][r]>0) return dp[l][r]; dp[l][r]=max(DP(l+1,r),DP(l,r-1)); dp[l][r]=max(dp[l][r],a[l]+a[r]+s.query(l+1,((l+r+2)>>1),0,0,s.sz)); return dp[l][r]; } int main(){ cin>>n; s.init(n); forn(i,n) cin>>a[i],s.update(i,a[i],0,0,s.sz); test{ ll l,r; cin>>l>>r; l--,r--; cout<<DP(l,r)<<'\n'; } return 0; } /* */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...