这是一份代码:
#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) 的!
加强数据!!!