Submission #238479

#TimeUsernameProblemLanguageResultExecution timeMemory
238479kshitij_sodaniConstellation 3 (JOI20_constellation3)C++17
100 / 100
327 ms48724 KiB
#include <bits/stdc++.h> using namespace std; typedef int64_t llo; #define mp make_pair #define pb push_back #define a first #define b second llo n,m; //#define endl '\n' llo it[200001]; llo aa,bb,cc; llo tree[800001]; llo build(llo no,llo l,llo r){ if(l==r){ tree[no]=it[l]; } else{ llo mid=(l+r)/2; build(no*2+1,l,mid); build(no*2+2,mid+1,r); tree[no]=max(tree[no*2+1],tree[no*2+2]); } } llo query(llo no,llo l,llo r,llo aa,llo bb,llo x){ if(r<aa or l>bb or aa>bb){ return n; } if(tree[no]<x){ return n; } if(l==r){ return l; } llo mid=(l+r)/2; llo xx=query(no*2+1,l,mid,aa,bb,x); if(xx<n){ return xx; } return query(no*2+2,mid+1,r,aa,bb,x); } llo query2(llo no,llo l,llo r,llo aa,llo bb,llo x){ if(r<aa or l>bb or aa>bb){ return -1; } if(tree[no]<x){ return -1; } if(l==r){ return l; } llo mid=(l+r)/2; llo xx=query2(no*2+2,mid+1,r,aa,bb,x); if(xx>-1){ return xx; } return query2(no*2+1,l,mid,aa,bb,x); } vector<llo> adj[200001]; vector<pair<pair<llo,llo>,pair<llo,llo>>> dd; llo dp[200001]; llo vis[200001]; llo tree2[200001]; void u(llo i,llo j){ while(i<=200000){ tree2[i]+=j; i+=(i&(-i)); } } llo ss(llo i){ llo tot=0; while(i>0){ tot+=tree2[i]; i-=(i&-i); } return tot; } llo dfs(llo no,llo par=-1){ dp[no]=0; vis[no]=1; for(auto j:adj[no]){ dfs(j,no); dp[no]+=dp[j]; } for(auto j:adj[no]){ u(dd[j].a.b+2,dp[j]); u(dd[no].a.b+2,-dp[j]); // cout<<dd[j].a.b+2<<" "<<dd[no].a.b+1<<endl; u(dd[no].a.a+1,dp[j]); u(dd[j].a.a+1,-dp[j]); // cout<<dd[no].a.a+1<<" "<<dd[j].a.a<<endl; } dp[no]=max(dp[no],ss(dd[no].b.a+1)+dd[no].b.b); // cout<<dd[no].b.a+1<<":::"<<ss(dd[no].b.a+1)<<endl; // cout<<no<<","<<dp[no]<<endl; } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cin>>n; llo su2=0; for(llo i=0;i<n;i++){ cin>>it[i]; } cin>>m; build(0,0,n-1); for(llo i=0;i<m;i++){ cin>>aa>>bb>>cc; su2+=cc; llo ind=query2(0,0,n-1,0,aa-2,bb); llo ind2=query(0,0,n-1,aa,n-1,bb); // cout<<ind<<"<"<<ind2<<endl; dd.pb({{ind+1,-(ind2-1)},{aa-1,cc}}); } sort(dd.begin(),dd.end()); for(llo i=0;i<m;i++){ dd[i].a.b=-dd[i].a.b; } /* for(auto j:dd){ cout<<j.a.a<<","<<j.a.b<<","<<j.b.a<<","<<j.b.b<<endl; }*/ stack<pair<pair<llo,llo>,llo>> ac; for(llo i=0;i<m;i++){ pair<pair<llo,llo>,pair<llo,llo>> kk=dd[i]; while(ac.size()){ if(ac.top().a.b<kk.a.b){ ac.pop(); } else{ adj[ac.top().b].pb(i); // cout<<ac.top().b<<":"<<i<<endl; break; } } ac.push({kk.a,i}); } llo ans=0; for(llo i=0;i<m;i++){ if(vis[i]==0){ dfs(i); ans+=dp[i]; } } cout<<su2-ans<<endl; return 0; }

Compilation message (stderr)

constellation3.cpp: In function 'llo build(llo, llo, llo)':
constellation3.cpp:24:1: warning: no return statement in function returning non-void [-Wreturn-type]
 }
 ^
constellation3.cpp: In function 'llo dfs(llo, llo)':
constellation3.cpp:98:1: warning: no return statement in function returning non-void [-Wreturn-type]
 }
 ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...