Submission #1276990

#TimeUsernameProblemLanguageResultExecution timeMemory
1276990phamminhsonFire (JOI20_ho_t5)C++20
0 / 100
354 ms327680 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long const int MAXN = 2000005; int N,Q; ll S[MAXN]; int ng[MAXN]; int st[MAXN],top; int Lq[MAXN],Rq[MAXN],Tq[MAXN],idq[MAXN]; ll diffA[MAXN],valA[MAXN],prefA[MAXN],ans[MAXN]; int main(){ ios::sync_with_stdio(false); cin.tie(NULL); if(!(cin>>N)) return 0; for(int i=1;i<=N;i++) cin>>S[i]; top=0; for(int i=N;i>=1;i--){ while(top>0 && S[st[top-1]]<=S[i]) top--; if(top==0) ng[i]=N+1; else ng[i]=st[top-1]; st[top++]=i; } cin>>Q; for(int i=0;i<Q;i++){ cin>>Lq[i]>>Rq[i]>>Tq[i]; idq[i]=i; } unordered_map<int, vector<int>> mp; mp.reserve(Q*2+10); for(int i=0;i<Q;i++) mp[Tq[i]].push_back(i); for(auto &pr: mp){ int T = pr.first; if(T> N) T = N; int t = T; for(int i=1;i<=N+1;i++) diffA[i]=0; for(int j=1;j<=N;j++){ int r = j + t; if(r > N) r = N; int ngpos = ng[j]-1; if(ngpos < r) r = ngpos; if(r >= j){ diffA[j] += S[j]; diffA[r+1] -= S[j]; } } ll cur=0; for(int i=1;i<=N;i++){ cur += diffA[i]; valA[i]=cur; prefA[i]=prefA[i-1]+valA[i]; } for(int idx: pr.second){ int L=Lq[idx], R=Rq[idx]; ans[idq[idx]] = prefA[R] - prefA[L-1]; } for(int i=0;i<=N;i++) prefA[i]=0; } for(int i=0;i<Q;i++) cout<<ans[i]<<"\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...
#Verdict Execution timeMemoryGrader output
Fetching results...