Submission #1173554

#TimeUsernameProblemLanguageResultExecution timeMemory
1173554WarinchaiTwo Antennas (JOI19_antennas)C++20
22 / 100
151 ms47548 KiB
#include<bits/stdc++.h> #define int long long using namespace std; vector<pair<int,int>>add[400005]; vector<pair<int,int>>del[400005]; int inf=1e18+5; struct node{ int mx,mn; node(int _mx=-inf,int _mn=inf){ mx=_mx,mn=_mn; } friend node operator+(node a,node b){ return node(max(a.mx,b.mx),min(a.mn,b.mn)); } }; struct segtree{ node info[800005]; void upd(int st,int en,int i,int pos,node val){ if(st>pos||en<pos)return; if(st==en)return info[i]=val,void(); int m=(st+en)/2; upd(st,m,i*2,pos,val); upd(m+1,en,i*2+1,pos,val); info[i]=info[i*2]+info[i*2+1]; } node fans(int st,int en,int i,int l,int r){ if(st>r||en<l)return node(); if(st>=l&&en<=r)return info[i]; int m=(st+en)/2; return fans(st,m,i*2,l,r)+fans(m+1,en,i*2+1,l,r); } }tr; int a[400005]; int b[400005]; int h[400005]; int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(0); int n;cin>>n; for(int i=1;i<=n;i++){ cin>>h[i]>>a[i]>>b[i]; add[i+a[i]].push_back({h[i],i}); del[i+b[i]].push_back({h[i],i}); } int ans=-1; for(int i=1;i<=n;i++){ //cerr<<"at:"<<i<<"\n"; for(auto x:add[i])tr.upd(1,n,1,x.second,node(x.first,x.first)); auto temp=tr.fans(1,n,1,max(0LL,i-b[i]),max(0LL,i-a[i])); ans=max({ans,h[i]-temp.mn,temp.mx-h[i]}); //cerr<<"qr:"<<i-b[i]<<" "<<i-a[i]<<":"<<tr.fans(1,n,1,i-b[i],i-a[i])<<"\n"; for(auto x:del[i])tr.upd(1,n,1,x.second,node()); } int q;cin>>q; for(int i=1;i<=q;i++){ int l,r;cin>>l>>r; cout<<ans<<"\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...