Submission #158546

#TimeUsernameProblemLanguageResultExecution timeMemory
158546combi1k1Two Antennas (JOI19_antennas)C++14
100 / 100
957 ms69404 KiB
#include<bits/stdc++.h> using namespace std; #define X first #define Y second #define lch i << 1 #define rch i << 1 | 1 const int N = 4e5 + 1; const int inf = 1e9 + 7; typedef pair<int,int> ii; ii t1[N << 1]; ii t2[N << 1]; int t3[N << 1]; ii lz[N << 1]; ii operator + (const ii &a,const ii &b) { return ii(max(a.X,b.X),max(a.Y,b.Y)); } int pus(int i,int l,int r) { t2[i] = t2[i] + lz[i]; if (l < r) lz[lch] = lz[lch] + lz[i], lz[rch] = lz[rch] + lz[i]; t3[i] = max(t3[i],t1[i].X + lz[i].Y); t3[i] = max(t3[i],t1[i].Y + lz[i].X); t3[i] = max(t3[i],-1); lz[i] = ii(-inf,-inf); } int upd(int i,int l,int r,int L,int R,int a,int b) { pus(i,l,r); if (l > R) return 0; if (L > r) return 0; if (L <= l && r <= R) { if (a == 0) lz[i] = ii(-b,b); if (b == 0) t1[i] = ii(a < 0 ? a : -a,a); pus(i,l,r); return 1; } int m = (l + r) / 2; upd(lch,l,m,L,R,a,b); ++m; upd(rch,m,r,L,R,a,b); t1[i] = t1[lch] + t1[rch]; t2[i] = t2[lch] + t2[rch]; t3[i] = max(t3[lch],t3[rch]); } int get(int i,int l,int r,int L,int R) { pus(i,l,r); if (l > R) return -1; if (L > r) return -1; if (L <= l && r <= R) return t3[i]; int m = (l + r) / 2; return max(get(lch,l,m,L,R),get(rch,m + 1,r,L,R)); } vector<int> add[N]; vector<int> rem[N]; vector<ii> Q[N]; int l[N], r[N]; int h[N]; int ans[N]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin >> n; for(int i = 1 ; i <= n ; ++i) { cin >> h[i]; int a; cin >> a; int b; cin >> b; ++b; add[i + a].push_back(i); rem[i + b].push_back(i); l[i] = max(i - b,0) + 1; r[i] = max(i - a,0); } int m; cin >> m; for(int i = 1 ; i <= m ; ++i) { int L; cin >> L; int R; cin >> R; Q[R].push_back({L,i}); } fill(t1 + 1,t1 + 4 * n,ii(-inf,-inf)); fill(t2 + 1,t2 + 4 * n,ii(-inf,-inf)); fill(t3 + 1,t3 + 4 * n,-1); fill(lz + 1,lz + 4 * n,ii(-inf,-inf)); for(int i = 1 ; i <= n ; ++i) { for(int x : add[i]) upd(1,1,n,x,x,h[x],0); for(int x : rem[i]) upd(1,1,n,x,x,-inf,0); upd(1,1,n,l[i],r[i],0,h[i]); for(ii q : Q[i]) ans[q.Y] = get(1,1,n,q.X,i); } for(int i = 1 ; i <= m ; ++i) cout << ans[i] << "\n"; }

Compilation message (stderr)

antennas.cpp: In function 'int pus(int, int, int)':
antennas.cpp:32:1: warning: no return statement in function returning non-void [-Wreturn-type]
 }
 ^
antennas.cpp: In function 'int upd(int, int, int, int, int, int, int)':
antennas.cpp:50:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...