Submission #341347

#TimeUsernameProblemLanguageResultExecution timeMemory
341347bigDuckExhibition (JOI19_ho_t2)C++14
100 / 100
262 ms24684 KiB
#include<bits/stdc++.h>
using namespace std;
#define INIT  ios_base :: sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
#define mp make_pair
#define pb push_back
#define ft first
#define sc second
#define ll long long
#define pii pair<int, int>
#define count_bits __builtin_popcount
#define int ll

int t, n, m, s[100010], v[100010], c[100010];
pii pr[100010];
map<pii, vector<int>> h;
bool pos[100010];

multiset<pii> ms;


int32_t main(){
INIT
cin>>n>>m;

for(int i=1; i<=n; i++){
    cin>>s[i]>>v[i];
    ms.insert({v[i], s[i]});
    pr[i]={s[i], v[i]};
}
sort(pr+1 , pr+1+n);

for(int i=1; i<=n; i++){
    pos[i]=true;
    h[pr[i] ].pb(i);
}

for(int i=1; i<=m ;i++){
    cin>>c[i];
}
sort(c+1, c+1+m);

int pt=n;
int res=0;

for(int i=m; i>=1; i--){

    while( (pt>=1) && ( (pos[pt]==false) || (pr[pt].ft>c[i]) ) ){
        if(pos[pt]==false){
            pt--; continue;
        }
        ms.erase(ms.find({pr[pt].sc, pr[pt].ft}) );
        pt--;
    }

    if(pt>=1){
        res++;
        auto it=ms.end();
        it--;
        int loc=(h[ make_pair(it->sc, it->ft) ].back() ); h[ make_pair(it->sc, it->ft) ].pop_back(); pos[loc]=false;
        ms.erase(it);
    }
    else{
        break;
    }

}
cout<<res;


return 0;
}



#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...