CSPS T1这样写到底能得多少分?可能>40吗
查看原帖
CSPS T1这样写到底能得多少分?可能>40吗
98509
AH3323342925楼主2021/10/24 15:41

RT

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;

int n, m1, m2, ans, dpgj[100005], dpgn[100005], x, a[100005], b[100005];
struct DATA{
    int st, ed;
}gj[100005], gn[100005];
bool cmp(DATA x,DATA y){
    return x.st < y.st;
}
int main(){
    cin>>n>>m1>>m2;
    for(int i=1; i<=m1; i++)cin>>gn[i].st>>gn[i].ed;
    sort(gn+1, gn+m1+1, cmp);
    for(int i=1; i<=m2; i++)cin>>gj[i].st>>gj[i].ed;
    sort(gj+1, gj+m2+1, cmp);
    x=1;
    dpgj[0]=dpgn[0]=0;
    for(int i=1; i<=m1; i++){
        for(int j=1; j<=x; j++){
            if(gn[i].st>a[j]){
                dpgn[j]++;
                a[j]=gn[i].ed;
                break;
            }
            if(j==x){
                x++;
                dpgn[x]++;
                a[x]=gn[i].ed;
                break;
            }
        }
    }
    x=1;
    for(int i=1; i<=m2; i++){
        for(int j=1; j<=x; j++){
            if(gj[i].st>b[j]){
                dpgj[j]++;
                b[j]=gj[i].ed;
                break;
            }
            if(j==x){
                x++;
                dpgj[x]++;
                b[x]=gj[i].ed;
                break;
            }
        }
    }
    for(int i=1; i<=n; i++){
        dpgn[i]+=dpgn[i-1];
        dpgj[i]+=dpgj[i-1];
    }
    for(int i=0; i<=n; i++){
        ans=max(ans, dpgn[i]+dpgj[n-i]);
    }
    cout<<ans;
    return 0;
}
//这样写到底能得多少分?可能>40吗
2021/10/24 15:41
加载中...