愤怒的数据
查看原帖
愤怒的数据
322792
Alea楼主2023/10/19 21:57

这是一份代码:

#include <iostream>
#include <iomanip>
#include <algorithm>
#define int long long
using namespace std;
const int SIZE=1e5+10;
int n,m0,m1,las[2][SIZE],ued[2][SIZE],sum[2],ans=0;
struct flig{
    int a,b;
    bool ty;
    flig(int a=0,int b=0,bool t=false):a(a),b(b),ty(t){}
}fil[SIZE];
signed main(){
    cin>>n>>m0>>m1;
    if(n>=m0+m1) return cout<<m0+m1<<endl,0;
    for(int i=1;i<=m0;i++){
        cin>>fil[i].a>>fil[i].b;
        fil[i].ty=false;
    }
    for(int i=m0+1;i<=m0+m1;i++){
        cin>>fil[i].a>>fil[i].b;
        fil[i].ty=true;
    }
    sort(fil+1,fil+m0+m1+1,[](flig a,flig b)->bool {return a.a!=b.a?a.a<b.a:a.b<b.b;});
    for(int i=1;i<=m0+m1;i++){
        bool ok=false;
        for(int j=1;j<=las[fil[i].ty][0];j++){
            if(las[fil[i].ty][j]<fil[i].a){
                las[fil[i].ty][j]=fil[i].b;
                ued[fil[i].ty][j]++;
                ok=true;
                break;
            }
        }
        if(!ok){
            las[fil[i].ty][0]++;
            las[fil[i].ty][las[fil[i].ty][0]]=fil[i].b;
            ued[fil[i].ty][las[fil[i].ty][0]]++;
        }
    }
    for(int i=1;i<=max(las[0][0],las[1][0])+1;i++) ued[0][i]+=ued[0][i-1];
    for(int i=1;i<=max(las[0][0],las[1][0])+1;i++) ued[1][i]+=ued[1][i-1];
    for(int i=0;i<=n;i++) ans=max(ans,ued[0][i]+ued[1][n-i]);
    cout<<ans<<endl;
    return 0;
}

它全部通过了数据!但是它的时间复杂度是 O(nm)\mathrm O(nm) 的!

加强数据!!!

2023/10/19 21:57
加载中...