Submission #938908

#TimeUsernameProblemLanguageResultExecution timeMemory
938908amirhoseinfar1385Fire (JOI20_ho_t5)C++17
1 / 100
1065 ms40020 KiB
#include<bits/stdc++.h> using namespace std; const long long maxn=200000+10; long long n,q; long long all[maxn],res[maxn],par[maxn],val[maxn],sz[maxn]; vector<pair<long long,long long>>allq[maxn]; vector<long long>adj[maxn]; pair<long long,long long>tof[maxn]; void vorod(){ cin>>n>>q; for(long long i=1;i<=n;i++){ cin>>all[i]; } for(long long i=1;i<=q;i++){ long long t,l,r; cin>>t>>l>>r; tof[i]=make_pair(l,r); allq[l-1].push_back(make_pair(-i,t)); allq[r].push_back(make_pair(i,t)); } } void pre(){ vector<long long>v; for(long long i=1;i<=n;i++){ while((long long)v.size()>0&&all[v.back()]<all[i]){ v.pop_back(); } if((long long)v.size()>0){ par[i]=v.back(); val[i]=all[v.back()]-all[i]; adj[v.back()].push_back(i); sz[i]=i-par[i]-1; } v.push_back(i); } } void solve(){ for(long long i=1;i<=n;i++){ long long u=i; while(u!=0){ sz[u]++; u=par[u]; } for(auto x:allq[i]){ long long mainres=0; for(long long j=1;j<=n;j++){ mainres+=max(min(x.second,sz[j])-(j-par[j]-1),0ll)*val[j]; // if(x.first==2){ // cout<<"wtf: "<<j<<" "<<sz[j]<<" "<<x.second<<" "<<val[j]<<" "<<mainres<<endl; // } } // cout<<i<<" "<<mainres<<" "<<x.first<<" "<<x.second<<endl; if(x.first<0){ x.first*=-1; mainres*=-1; } res[x.first]+=mainres; } } } void khor(){ for(long long i=1;i<=q;i++){ for(long long j=tof[i].first;j<=tof[i].second;j++){ res[i]+=all[j]; } cout<<res[i]<<"\n"; } } int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); //freopen("inp.txt","r",stdin); vorod(); pre(); solve(); khor(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...