求调,回复必关注
查看原帖
求调,回复必关注
305735
Jean_Gunnhildr楼主2024/11/20 17:03
#include<bits/stdc++.h>
using namespace std;
#define pii pair<int,int>
const int N=1e5+5;
//cnt1[i]是国内第i个廊桥的停机数,cnt2是国际
int n,m1,m2,cnt1[N],cnt2[N],len1,len2;
pii na[N],inter[N];
//na存国内的起止时间,inter存国际
int main(){
    scanf("%d%d%d",&n,&m1,&m2);
    for(int i=1;i<=m1;i++) scanf("%d%d",&na[i].first,&na[i].second);
    for(int i=1;i<=m2;i++) scanf("%d%d",&inter[i].first,&inter[i].second);
    sort(na+1,na+1+m1);
    sort(inter+1,inter+1+m2);
    priority_queue<pii,vector<pii>,greater<pii> > q1,q2;
    q1.push({-1,1});
    len1=1;
    for(int i=1;i<=m1;i++){
        if(q1.top().first<=na[i].first){
            cnt1[q1.top().second]++;
            int tmp=q1.top().second;
            q1.pop();
            q1.push({na[i].second,tmp});
        }else if(len1<n){
            cnt1[++len1]++;
            q1.push({na[i].second,len1});
        }
    }
    for(int i=1;i<=n;i++) cnt1[i]+=cnt1[i-1];
    q2.push({-1,1});
    len2=1;
    for(int i=1;i<=m2;i++){
        if(q2.top().first<=inter[i].first){
            cnt2[q2.top().second]++;
            int tmp=q2.top().second;
            q2.pop();
            q2.push({inter[i].second,tmp});
        }else if(len2<n){
            cnt2[++len2]++;
            q2.push({inter[i].second,len2});
        }
    }
    int ans=0;
    for(int i=1;i<=n;i++) cnt2[i]+=cnt2[i-1];
    for(int i=0;i<=n;i++) ans=max(cnt1[i]+cnt2[n-i],ans);
    printf("%d\n",ans);
    return 0;
}

求hack

2024/11/20 17:03
加载中...