Submission #1325993

#TimeUsernameProblemLanguageResultExecution timeMemory
1325993AvianshFish 3 (JOI24_fish3)C++20
0 / 100
358 ms122944 KiB
#include <bits/stdc++.h> using namespace std; #define int long long signed main(){ ios::sync_with_stdio(0); cin.tie(0); int n,d; cin >> n >> d; assert(d==1); int c[n]; for(int &i : c){ cin >> i; } const int lg = 20; const int inf = 1e18; int lef[n][lg]; int ans[n][lg]; map<int,int>mp; mp[-1]=-1; int pref[n]; ans[0][0]=0; pref[0]=c[0]; lef[0][0]=-1; mp[c[0]]=0; for(int i = 1;i<n;i++){ auto it = mp.upper_bound(c[i]); --it; lef[i][0]=(*it).second; pref[i]=c[i]; if(i){ pref[i]+=pref[i-1]; } int sum=pref[i-1]; if(lef[i][0]>=0) sum-=pref[lef[i][0]]; sum-=(i-lef[i][0]-1)*c[i]; ans[i][0]=sum; mp[c[i]]=i; } for(int i = 0;i<n;i++){ fill(lef[i]+1,lef[i]+lg,-1); fill(ans[i]+1,ans[i]+lg,inf); for(int j = 1;j<lg;j++){ if(lef[i][j-1]<0) break; lef[i][j]=lef[lef[i][j-1]][j-1]; ans[i][j]=ans[i][j-1]+ans[lef[i][j-1]][j-1]; } } int q; cin >> q; while(q--){ int l,r; cin >> l >> r; l--;r--; int curr = 0; for(int i = lg-1;i>=0;i--){ if(lef[r][i]>=l){ curr+=ans[r][i]; r=lef[r][i]; } } assert(lef[r][0]<l); curr+=pref[r]; if(l){ curr-=pref[l-1]; } curr-=(r-l+1)*c[r]; cout << curr << "\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...