Submission #1230832

#TimeUsernameProblemLanguageResultExecution timeMemory
1230832vivkostovExamination (JOI19_examination)C++20
0 / 100
219 ms162296 KiB
#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
void speed()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
}
const long long int maxn=1e9*2;
struct stud
{
    long long int a,b;
};
bool cmp(stud a1,stud a2)
{
    return a1.a>a2.a;
}
struct query
{
    long long int x,y,z,ind;
};
bool cmp2(query a1,query a2)
{
    return a1.x>a2.x;
}
struct point
{
    long long int st,ind;
    bool operator<(const point&a)const
    {
        if(st<a.st)return true;
        if(st>a.st)return false;
        return ind>a.ind;
    }
};
struct cell
{
    long long int l,r,in,st;
};
long long int n,q,br=1,otg[100005];
stud a[100005];
query b[100005];
cell p[5000005];
void check(int h)
{
    if(!p[h].l)
    {
        br++;
        p[h].l=br;
        br++;
        p[h].r=br;
        br++;
        p[h].in=br;
    }
}
void update2(long long int l,long long int r,int q,int h)
{
    if(l>q||r<q)return;
    if(l==r)
    {
        p[h].st++;
        return;
    }
    check(h);
    long long int mid=(l+r)/2;
    update2(l,mid,q,p[h].l);
    update2(mid+1,r,q,p[h].r);
    p[h].st=p[p[h].l].st+p[p[h].r].st;
}
void update1(long long int l,long long int r,long long int q,int h,long long int st)
{
    if(l>q||r<q)return;
    check(h);
    update2(0,maxn,st,p[h].in);
    if(l==r)return;
    long long int mid=(l+r)/2;
    update1(l,mid,q,p[h].l,st);
    update1(mid+1,r,q,p[h].r,st);
}
int sum2(long long int l,long long int r,long long int ql,long long int qr,int h)
{
    if(l>qr||r<ql)return 0;
    if(l>=ql&&r<=qr)return p[h].st;
    check(h);
    long long int mid=(l+r)/2;
    return sum2(l,mid,ql,qr,p[h].l)+sum2(mid+1,r,ql,qr,p[h].r);
}
int sum1(long long int l,long long int r,long long int ql,long long int qr,int h,long long int st)
{
    if(l>qr||r<ql)return 0;
    check(h);
    if(l>=ql&&r<=qr)return sum2(0,maxn,st,maxn,p[h].in);
    long long int mid=(l+r)/2;
    return sum1(l,mid,ql,qr,p[h].l,st)+sum1(mid+1,r,ql,qr,p[h].r,st);
}
void resh()
{
    int pos=1;
    for(int i=1;i<=n;i++)
    {
        while(pos<=n&&a[pos].a>=b[i].x)
        {
            update1(0,maxn,a[pos].b,1,a[pos].a+a[pos].b);
            pos++;
        }
        otg[b[i].ind]=sum1(0,maxn,b[i].y,maxn,1,b[i].z);
    }
    for(int i=1;i<=q;i++)
    {
        cout<<otg[i]<<endl;
    }
}
void read()
{
    cin>>n>>q;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i].a>>a[i].b;
    }
    for(int i=1;i<=q;i++)
    {
        cin>>b[i].x>>b[i].y>>b[i].z;
        b[i].ind=i;
    }
    sort(a+1,a+n+1,cmp);
    sort(b+1,b+q+1,cmp2);
    resh();
}
int main()
{
    speed();
    read();
    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...