제출 #1300452

#제출 시각아이디문제언어결과실행 시간메모리
1300452zhangspicyuwuFish 3 (JOI24_fish3)C++20
100 / 100
396 ms41772 KiB
#pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #include <bits/stdc++.h> using namespace std; #ifdef LOCAL #include <D:/debug.h> #define debug(...) cerr << "[" << #__VA_ARGS__ << "]:", debug_out(__VA_ARGS__) #else #define debug(...) 42 #endif #define fi first #define se second #define pii pair<int,int> #define pll pair<long long,long long> #define int long long const int N = 3e5 + 5, mod = 1e9 + 7, imod = (mod + 1) / 2; const long long inf = 1e18; int n, a[N], d,q; int seg[4*N],lazy[4*N]; void down(int crr,int l,int r){ if(lazy[crr]){ const int x=lazy[crr],mid=l+r>>1; lazy[crr]=0; lazy[crr*2]+=x; lazy[crr*2+1]+=x; seg[crr*2]+=x*(mid-l+1); seg[crr*2+1]+=x*(r-mid); } } void upd(int crr,int l,int r,int lm,int rm,int val){ if(l>rm || lm>r) return; if(lm<=l && r<=rm){ seg[crr]+=val*(r-l+1); lazy[crr]+=val; return; } down(crr,l,r); int mid=(l+r)>>1; upd(crr*2,l,mid,lm,rm,val); upd(crr*2+1,mid+1,r,lm,rm,val); seg[crr]=seg[crr*2]+seg[crr*2+1]; } int get(int crr,int l,int r,int lm,int rm){ if(l>rm || lm>r) return 0; if(lm<=l && r<=rm) return seg[crr]; down(crr,l,r); int mid=(l+r)>>1; return get(crr*2,l,mid,lm,rm)+get(crr*2+1,mid+1,r,lm,rm); } int ans[N]; vector<pii> event[N]; int solve(int u){ return a[u]-get(1,1,n,u,u)*d; } signed main(){ //freopen("GAME.inp","r",stdin); //freopen("MESSAGE.out","w",stdout); ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> d; for(int i=1;i<=n;i++) cin >> a[i]; cin>>q; for(int i=1;i<=q;i++){ int l,r; cin>>l>>r; event[r].push_back({l,i}); } vector<int> st; for(int i=1;i<=n;i++){ int r=i; while(!st.empty()){ int l=st.back(); int x=solve(r-1),y=solve(r); if(x<=y) break; upd(1,1,n,l,r-1,(x-y+d-1)/d); r=l; st.pop_back(); } st.push_back(r); for(const pii j:event[i]){ if(solve(j.fi)<0) ans[j.se]=-1; else ans[j.se]=get(1,1,n,j.fi,i); } } for(int i=1;i<=q;i++){ cout<<ans[i]<<"\n"; } }
#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...