제출 #879344

#제출 시각아이디문제언어결과실행 시간메모리
87934412345678Two Antennas (JOI19_antennas)C++17
22 / 100
174 ms35876 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long const int nx=2e5+5; ll n, h[nx], a[nx], b[nx], ans=-1; vector<ll> add[nx], rem[nx]; struct segtree { ll d[4*nx], t=0; void build(int l, int r, int i) { d[i]=t?-2e9:2e9; if (l==r) return; int md=(l+r)/2; build(l, md, 2*i); build(md+1, r, 2*i+1); } void update(int l, int r, int i, int idx, int vl) { if (r<idx||idx<l) return; if (l==r) return void(d[i]=vl); int md=(l+r)/2; update(l, md, 2*i, idx, vl); update(md+1, r, 2*i+1, idx, vl); if (t) d[i]=max(d[2*i], d[2*i+1]); else d[i]=min(d[2*i], d[2*i+1]); } ll query(int l, int r, int i, int ql, int qr) { if (qr<l||r<ql) return t?-2e9:2e9; if (ql<=l&&r<=qr) return d[i]; int md=(l+r)/2; if (t) return max(query(l, md, 2*i, ql, qr), query(md+1, r, 2*i+1, ql, qr)); else return min(query(l, md, 2*i, ql, qr), query(md+1, r, 2*i+1, ql, qr)); } } mx, mn; int main() { cin.tie(NULL)->sync_with_stdio(false); cin>>n; mx.t=1; mx.build(1, n, 1); mn.build(1, n, 1); for (int i=1; i<=n; i++) cin>>h[i]>>a[i]>>b[i], add[min(nx-1ll, i+a[i])].push_back(i), rem[min(nx-1ll, i+b[i])].push_back(i); for (int i=1; i<=n; i++) { for (auto x:add[i]) mx.update(1, n, 1, x, h[x]), mn.update(1, n, 1, x, h[x]); if (i-a[i]>=1) { ans=max({ans, mx.query(1, n, 1, max(1ll, i-b[i]), i-a[i])-h[i], -mn.query(1, n, 1, max(1ll, i-b[i]), i-a[i])+h[i]}); //cout<<i<<' '<<i-b[i]<<' '<<i-a[i]<<' '<<mx.query(1, n, 1, max(1, i-b[i]), i-a[i])<<' '<<mn.query(1, n, 1, max(1, i-b[i]), i-a[i])<<'\n'; } for (auto x:rem[i]) mx.update(1, n, 1, x, -2e9), mn.update(1, n, 1, x, 2e9); } cin>>n>>n>>n; cout<<ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...