#include<bits/stdc++.h>
#define int long long
using namespace std;
struct fw{
    int info[400005];
    void upd(int id,int val){
        for(int i=id;i<=4e5;i+=i&-i)info[i]+=val;
    }
    int fans(int id){
        int ans=0;
        for(int i=id;i>0;i-=i&-i)ans+=info[i];
        return ans;
    }
}all,ans;
int rans[200005];
vector<pair<int,pair<int,int>>>op[400005];
int32_t main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int n,q;cin>>n>>q;
    vector<int>val;
    vector<int>valy;
    vector<pair<int,int>>doll;
    for(int i=1;i<=n;i++){
        int x,y;cin>>x>>y;
        val.push_back(x);
        doll.push_back({x,y});
        valy.push_back(y);
    }
    vector<pair<int,int>>qr;
    for(int i=0;i<q;i++){
        int x,y;cin>>x>>y;
        qr.push_back({x,y});
        val.push_back(x);
        valy.push_back(y);
    }
    //cerr<<"work\n";
    sort(val.begin(),val.end());
    val.erase(unique(val.begin(),val.end()),val.end());
    sort(valy.begin(),valy.end());
    valy.erase(unique(valy.begin(),valy.end()),valy.end());
    //cerr<<"work\n";
    for(auto x:doll){
        x.first=lower_bound(val.begin(),val.end(),x.first)-val.begin()+1;
        x.second=lower_bound(valy.begin(),valy.end(),x.second)-valy.begin()+1;
        op[x.first].push_back({1,{x.second,0}});
    }
    for(int i=0;i<qr.size();i++){
        auto x=qr[i];
        x.first=lower_bound(val.begin(),val.end(),x.first)-val.begin()+1;
        x.second=lower_bound(valy.begin(),valy.end(),x.second)-valy.begin()+1;
        op[x.first].push_back({0,{x.second,i}});
    }
    for(int i=1;i<=val.size();i++){
        sort(op[i].begin(),op[i].end());
    }
    multiset<int>ms;
    //cerr<<"work\n";
    for(int i=val.size();i>=1;i--){
        vector<int>upd;
        vector<int>add;
        for(auto temp:op[i]){
            int t=temp.first;
            int y=temp.second.first;
            int id=temp.second.second;
            if(t==1){
                auto p=ms.upper_bound(y);
                if(p!=ms.end()){
                    int pp=*p;
                    ms.erase(p);
                    upd.push_back(pp);
                }
                add.push_back(y);
                all.upd(y,1);
            }
        }
        for(auto x:add)ms.insert(x);
        for(auto x:upd)ans.upd(x,1);
        for(auto temp:op[i]){
            int t=temp.first;
            int y=temp.second.first;
            int id=temp.second.second;
            if(t==0){
                rans[id]=all.fans(y)-ans.fans(y);
            }
        }
    }
    for(int i=0;i<q;i++)cout<<rans[i]<<"\n";
}
| # | 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... |