Submission #979395

#TimeUsernameProblemLanguageResultExecution timeMemory
979395AndreyFish 3 (JOI24_fish3)C++14
100 / 100
1474 ms608604 KiB
#include<bits/stdc++.h> using namespace std; vector<long long> haha(300001); vector<long long> wow(1200001); vector<long long> bruh[12000001]; vector<long long> yay[1200001]; vector<long long> yeah[1200001]; long long sm = LLONG_MAX,ans = 0,d; void build(long long l, long long r, long long x) { bruh[x].push_back(LLONG_MAX); yay[x].push_back(0); yeah[x].push_back(0); long long sb = 0,br = 0; for(long long i = r; i >= l; i--) { long long c = bruh[x][bruh[x].size()-1]; long long f = 0; if(c < haha[i]) { f = (haha[i]-c+d-1)/d; } wow[x]+=f; bruh[x].push_back(haha[i]-f*d); long long e = haha[i]-f*d; if(c != LLONG_MAX) { br+=(c-e)/d; } yay[x].push_back(br); sb+=br; yeah[x].push_back(sb); } if(l == r) { return; } long long m = (l+r)/2; build(l,m,x*2); build(m+1,r,x*2+1); } void calc(long long l, long long r, long long x, long long ql, long long qr) { if(l == ql && r == qr) { if(sm < 0) { return; } long long bl = 0,br = bruh[x].size()-1; ans+=wow[x]; if(sm >= bruh[x][1]) { sm = bruh[x][bruh[x].size()-1]; return; } long long c = (bruh[x][1]-sm+d-1)/d; while(bl < br) { long long mid = (bl+br+1)/2; if(yay[x][mid] <= c) { bl = mid; } else { br = mid-1; } } ans+=c*bl-yeah[x][bl]; sm = min(sm,bruh[x][bruh[x].size()-1]-d*(max(0LL,c-yay[x][bruh[x].size()-1]))); return; } long long m = (l+r)/2; if(qr <= m) { calc(l,m,x*2,ql,qr); } else if(ql > m) { calc(m+1,r,x*2+1,ql,qr); } else { calc(m+1,r,x*2+1,m+1,qr); calc(l,m,x*2,ql,m); } } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); long long n,q,l,r; cin >> n >> d; for(long long i = 1; i <= n; i++) { cin >> haha[i]; } cin >> q; build(1,n,1); for(long long i = 0; i < q; i++) { ans = 0; sm = LLONG_MAX; cin >> l >> r; calc(1,n,1,l,r); if(sm < 0) { cout << -1 << "\n"; } else { cout << ans << "\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...