#include <bits/stdc++.h>
using namespace std;
struct ant
{
int h,a,b;
ant() {}
ant(int _h,int _a,int _b)
{
h=_h;
a=_a;
b=_b;
}
};
int n;
ant t[200001];
int q;
pair<int,int> p[200001];
void read()
{
cin>>n;
for(int i=1; i<=n; i++)
{
int x,y,z;
cin>>x>>y>>z;
t[i]= {x,y,z};
}
cin>>q;
for(int i=1; i<=q; i++)
{
cin>>p[i].first>>p[i].second;
}
}
multiset<int> s[800001];
void updadd(int i,int l,int r,int ql,int qr,int h)
{
if(ql>qr)return;
if(ql<=l&&r<=qr)
{
s[i].insert(h);
return;
}
int m=(l+r)/2;
updadd(i*2,l,m,ql,min(qr,m),h);
updadd(i*2+1,m+1,r,max(m+1,ql),qr,h);
}
void updrem(int i,int l,int r,int ql,int qr,int h)
{
if(ql>qr)return;
if(ql<=l&&r<=qr)
{
s[i].erase(s[i].find(h));
return;
}
int m=(l+r)/2;
updrem(i*2,l,m,ql,min(qr,m),h);
updrem(i*2+1,m+1,r,max(m+1,ql),qr,h);
}
void add(int i)
{
//cout<<"+ "<<i<<endl;
int l=max(1,i-t[i].b);
int r=i-t[i].a;
if(r<=0)return;
updadd(1,1,n,l,r,t[i].h);
}
void rem(int i)
{
//cout<<"- "<<i<<endl;
int l=max(1,i-t[i].b);
int r=i-t[i].a;
if(r<=0)return;
updrem(1,1,n,l,r,t[i].h);
}
int query(int i,int l,int r,int id,int h)
{
int ans=-1;
if(s[i].size())
{
auto it=s[i].begin();
ans=abs(h-*it);
it=s[i].end();
it--;
ans=max(ans,abs(h-*it));
}
if(l==r)return ans;
int m=(l+r)/2;
if(id<=m)return max(ans,query(i*2,l,m,id,h));
else return max(ans,query(i*2+1,m+1,r,id,h));
}
int ans=-1;
void solve(int l,int r)
{
if(l==r)return;
int m=(l+r)/2;
for(int i=m+1;i<=r;i++)
add(i);
for(int i=l;i<=m;i++)
ans=max(ans,query(1,1,n,i,t[i].h));
for(int i=m+1;i<=r;i++)
rem(i);
solve(l,m);
solve(m+1,r);
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
read();
solve(1,n);
cout<<ans<<endl;
return 0;
}
/*
5
10 2 4
1 1 1
2 1 3
1 1 1
100 1 1
5
1 2
2 3
1 3
1 4
1 5
1 3
1 1
4 4
2 5
3 4
*/
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |