Submission #1266739

#TimeUsernameProblemLanguageResultExecution timeMemory
1266739namhhTwo Antennas (JOI19_antennas)C++20
100 / 100
394 ms52044 KiB
#include<bits/stdc++.h> using namespace std; #define int long long #define pii pair<int,int> #define fi first #define se second const int N = 2e5+5; int n,q,h[N],a[N],b[N],ans[N]; pii lazy[4*N]; struct Node{ int mx,mn,mxval; }; Node st[4*N]; Node merge(Node a, Node b){ Node c; c.mx = max(a.mx,b.mx); c.mn = min(a.mn,b.mn); c.mxval = max(a.mxval,b.mxval); return c; } void build(int id, int l, int r){ if(l == r){ st[id] = {(int)-1e18,(int)1e18,(int)-1e18}; return; } int mid = (l+r)/2; build(2*id,l,mid); build(2*id+1,mid+1,r); st[id] = merge(st[2*id],st[2*id+1]); } void down(int id){ lazy[2*id].fi = max(lazy[2*id].fi,lazy[id].fi); lazy[2*id+1].fi = max(lazy[2*id+1].fi,lazy[id].fi); lazy[2*id].se = min(lazy[2*id].se,lazy[id].se); lazy[2*id+1].se = min(lazy[2*id+1].se,lazy[id].se); st[2*id].mxval = max({st[2*id].mxval,st[2*id].mx-lazy[id].se,lazy[id].fi-st[2*id].mn}); st[2*id+1].mxval = max({st[2*id+1].mxval,st[2*id+1].mx-lazy[id].se,lazy[id].fi-st[2*id+1].mn}); lazy[id] = {-1e18,1e18}; } void update(int id, int l, int r, int i, int val1, int val2){ if(l > i || r < i) return; if(l == r){ st[id].mx = val1; st[id].mn = val2; return; } down(id); int mid = (l+r)/2; update(2*id,l,mid,i,val1,val2); update(2*id+1,mid+1,r,i,val1,val2); st[id] = merge(st[2*id],st[2*id+1]); } void update1(int id, int l, int r, int u, int v, int val){ if(l > v || r < u) return; if(l >= u && r <= v){ lazy[id].fi = max(lazy[id].fi,val); lazy[id].se = min(lazy[id].se,val); st[id].mxval = max({st[id].mxval,st[id].mx-val,val-st[id].mn}); return; } if(l != r) down(id); int mid = (l+r)/2; update1(2*id,l,mid,u,v,val); update1(2*id+1,mid+1,r,u,v,val); st[id] = merge(st[2*id],st[2*id+1]); } Node get(int id, int l, int r, int u, int v){ if(l > v || r < u) return {(int)-1e18,(int)1e18,(int)-1e18}; if(l != r) down(id); if(l >= u && r <= v) return st[id]; int mid = (l+r)/2; return merge(get(2*id,l,mid,u,v),get(2*id+1,mid+1,r,u,v)); } vector<pii>events[N],query[N]; signed main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> n; for(int i = 1; i <= n; i++){ cin >> h[i] >> a[i] >> b[i]; if(i+a[i] <= n) events[i+a[i]].push_back({i,1}); if(i+b[i]+1 <= n) events[i+b[i]+1].push_back({i,-1}); } build(1,1,n); for(int i = 1; i <= 4*n; i++) lazy[i] = {-1e18,1e18}; cin >> q; for(int i = 1; i <= q; i++){ int l,r; cin >> l >> r; query[r].push_back({l,i}); } for(int i = 1; i <= n; i++){ for(auto v: events[i]){ if(v.se == 1) update(1,1,n,v.fi,h[v.fi],h[v.fi]); else update(1,1,n,v.fi,-1e18,1e18); } int l = max((int)1,i-b[i]); int r = i-a[i]; if(l <= r) update1(1,1,n,l,r,h[i]); for(auto[l,id]: query[i]){ ans[id] = -1; ans[id] = max(ans[id],get(1,1,n,l,i).mxval); } } 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...