Submission #1288694

#TimeUsernameProblemLanguageResultExecution timeMemory
1288694simona1230Two Antennas (JOI19_antennas)C++20
22 / 100
172 ms19864 KiB
#include <bits/stdc++.h>

using namespace std;
int n;
int a[200001];
int b[200001];
int h[200001];

int k;
pair<int,int> q[200001];

void read()
{
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>h[i]>>a[i]>>b[i];
    cin>>k;
    for(int i=1;i<=k;i++)
        cin>>q[i].first>>q[i].second;
}

vector<int> v1[200001],v2[200001];

int t[800001];

int query(int i,int l,int r,int ql,int qr)
{
    if(ql>qr)return 0;
    if(ql<=l&&r<=qr)return t[i];
    int m=(l+r)/2;
    return max(query(i*2,l,m,ql,min(qr,m)),query(i*2+1,m+1,r,max(m+1,ql),qr));
}

void update(int i,int l,int r,int id,int vl)
{
    if(l==r)
    {
        if(vl)t[i]=h[id];
        else t[i]=0;
        return;
    }

    int m=(l+r)/2;
    if(id<=m)update(i*2,l,m,id,vl);
    else update(i*2+1,m+1,r,id,vl);

    t[i]=max(t[i*2],t[i*2+1]);
}

int ans;
void sub3()
{
    for(int i=1;i<=n;i++)
        v1[i].clear(),
        v2[i].clear();

    for(int i=1;i<=n;i++)
    {
        if(i+a[i]<=n)
        {
            v1[i+a[i]].push_back(i);
            v2[min(n,i+b[i])].push_back(i);
        }
    }
    //cout<<"out"<<endl;

    for(int i=1;i<=n;i++)
    {
        for(int j=0;j<v1[i].size();j++)
        {
            //cout<<"+ "<<v1[i][j]<<endl;
            update(1,1,n,v1[i][j],1);
        }
        //cout<<i<<" "<<ans<<endl;

        //cout<<"? "<<i<<endl;
        ans=max(ans,query(1,1,n,max(1,i-b[i]),i-a[i])-h[i]);

        for(int j=0;j<v2[i].size();j++)
        {
            //cout<<"- "<<v2[i][j]<<endl;
            update(1,1,n,v2[i][j],0);
        }
    }
}



int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	read();
	sub3();
	reverse(a+1,a+n+1);
	reverse(b+1,b+n+1);
	reverse(h+1,h+n+1);
	sub3();
	cout<<ans<<endl;
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...