Submission #1325972

#TimeUsernameProblemLanguageResultExecution timeMemory
1325972AvianshFish 3 (JOI24_fish3)C++20
0 / 100
2095 ms100508 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; 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 las = 0; int pref[n]; ans[0][0]=0; pref[0]=c[0]; lef[0][0]=-1; 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]; } if(las<=(*it).second+1){ int sum = 0; if(i){ sum=pref[i-1]; } if((*it).second>=0) sum-=pref[(*it).second]; int req = c[las]%d; if(req>c[i]){ ans[i][0]=inf; } else{ req=((c[i]-req)/d)*d+req; sum-=(i-(*it).second-1)*req; assert(sum%d==0); ans[i][0]=sum/d; } } else{ ans[i][0]=inf; } if(c[las]%d!=c[i]%d){ las=i; } 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){ //valid curr+=ans[r][i]; r=lef[r][i]; } } assert(lef[r][0]<l); int m = c[r-1]%d; for(int i = r-1;i>=l;i--){ if(c[i]%d!=m){ curr=inf; break; } if(m>c[r]){ curr=inf; break; } int req=((c[r]-m)/d)*d+m; assert((c[i]-req)%d==0); if(c[i]-req<0){ curr=inf; break; } curr+=(c[i]-req)/d; } if(curr>=inf){ cout << -1 << "\n"; } else{ 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...