临时文件

发布时间 2023-11-07 21:16:10作者: minecraft114514
#include<bits/stdc++.h>
#define ls p<<1
#define rs p<<1|1
#define int long long
using namespace std;
int n,m,a[(1<<21)|1],b[(1<<21)|1];
struct aa
{
    int l,r,max,maxsum=1;
}t[(1<<23)|1];
inline int read()
{
    register int x=0;register bool f=1;
    register char c=getchar();
    for(;c<'0'||c>'9';c=getchar())if(c=='-')f=0;
    for(;'0'<=c&&c<='9';c=getchar())x=(x<<1)+(x<<3)+(c^48);
    return f?x:~x+1;
}
void write(int x)
{
    if(x<0)putchar('-'),x=~x+1;
    if(x>9)write(x/10);
    putchar((x%10)+'0');
}
inline int max(int x,int y){return x>y?x:y;}
inline int min(int x,int y){return x<y?x:y;}
inline void swap(int &x,int &y){int tmp=x;x=y;y=tmp;}
/*inline void push_up(int p){t[p].sum=t[ls].sum+t[rs].sum;}
inline void push_down(int p)
{
    if(t[p].add)
    {
        t[ls].add+=t[p].add;t[rs].add+=t[p].add;
        t[ls].sum+=t[p].add*(t[ls].r-t[ls].l+1);
        t[rs].sum+=t[p].add*(t[rs].r-t[rs].l+1);
        t[p].add=0;
    }
}*/
void push_up(int p)
{
    if(t[p].max==t[ls].max&&t[ls].max==t[rs].max)t[p].maxsum+=t[ls].maxsum+t[rs].maxsum;
    else if(t[p].max==t[ls].max&&t[ls].max>t[rs].max)t[p].maxsum+=t[ls].maxsum;
    else if(t[p].max==t[rs].max&&t[ls].max<t[rs].max)t[p].maxsum+=t[rs].maxsum;
    else if(t[ls].max>t[rs].max)t[p].max=t[ls].max,t[p].maxsum=t[ls].maxsum;
    else if(t[ls].max==t[rs].max)t[p].max=t[ls].max,t[p].maxsum=t[ls].maxsum+t[rs].maxsum;
    else if(t[ls].max<t[rs].max)t[p].max=t[rs].max,t[p].maxsum=t[rs].maxsum;
}
void build(int p,int l,int r)
{
    t[p].l=l,t[p].r=r;
    if(l==r)
    {
        t[p].max=b[l];
        return;
    }
    int mid=(l+r)>>1;
    build(ls,l,mid);
    build(rs,mid+1,r);
    push_up(p);
}
/*void update(int ql,int qr,int p,int k)
{
    if(ql<=t[p].l&&t[p].r<=qr)
    {
        t[p].sum+=k*(t[p].r-t[p].l+1);
        t[p].add+=k;return;
    }
    push_down(p);
    int mid=(t[p].l+t[p].r)>>1;
    if(ql<=mid)update(ql,qr,ls,k);
    if(qr>mid)update(ql,qr,rs,k);
    push_up(p);
}*/
aa query(int ql,int qr,int p)
{
    aa res=0;
    if(qr<t[p].l||t[p].r<ql)return res;
    if(ql<=t[p].l&&t[p].r<=qr)return t[p];
    int mid=t[p].l+t[p].r>>1;
    if(ql<=mid&&mid<qr)
    {
        if(res.query(ql,qr,ls)>res)
        //res=max(res,query(ql,qr,ls));
    }
    if(qr>mid)res=max(res,query(ql,qr,rs));
    return res;
}
signed main(void)
{
    int i,b,c,d,ans;
    n=read();m=read();
    if(!n||!m)return 0;
    for(i=1;i<=n;++i)a[i]=read(),b[i]=read();
    build(1,1,n);
    for(;m;--m)
    {
        c=read(),d=read();
        int nc=upper_bound(a+1,a+1+n,c)-a;
        int nd=find(a+1,a+1+n,d)-a;
        if(nc!=n+1&&nd!=n+1)
        {
            ans=query(nc,nd,1);
            if(ans==b[nd]&&a[nd]-a[nc-1]==nd-nc+1)
            {

            }
        }
    }
    return 0;
}