25分RE
查看原帖
25分RE
1022619
RMA_08_Valverde楼主2023/12/30 08:53
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
priority_queue<int,vector<int>,greater<int>> v[N];
int c[N];
int n,m;
int ans;	
multiset<int> s;
int main(){
    scanf("%d%d",&n,&m);
    c[n+1]=INT_MAX;
    for(int i=1;i<=n;i++) scanf("%d",&c[i]);
    for(int i=1;i<=m;i++){
        int x, y;
        scanf("%d%d",&x,&y);
        v[x].push(y+1);
    } 
    for(int i=1;i<=n+1;i++){
        while(!s.empty() && *s.begin()==i){
            s.erase(s.begin());
            ans++;
        }
        if(i==n+1) break;
        if(s.size()>c[i]){
            multiset<int>::iterator it=s.end();
            it--;
            while(s.size()>c[i]){
                multiset<int>::iterator k=it;
                s.erase(k);
                it--;
            }
        }
        while(!v[i].empty()){
            int tmp=v[i].top();
            v[i].pop();
            if(s.size()<c[i]){
                s.insert(tmp);
            }
            else{
                multiset<int>::iterator it=s.end();
                it--;
                if(*it>tmp){
                    s.erase(it);
                    s.insert(tmp);
                }
                else break;
            }
        }
    }
    printf("%d\n",ans);
    return 0;
}
2023/12/30 08:53
加载中...