感觉思路没问题,但是下的#1数据过不了。拜托各位大佬!
AC:2,4,9,15,16,21
#include <bits/stdc++.h>
using namespace std;
const int MAX=100001;
int n,m1,m2;
int ans1[MAX+5],ans2[MAX+5];//ans1为国内廊桥 ,ans2为国际廊桥
int as1[MAX+5],as2[MAX+5];//as1为廊桥的飞机数,as2为廊桥的飞机数
int a1[MAX+5],a2[MAX+5],b1[MAX+5],b2[MAX+5];
int ans = -1;
int main(){
cin>>n>>m1>>m2;
for (int i=1;i<=m1;i++) {
cin>>a1[i]>>b1[i];
}
for (int i=1;i<=m2;i++) {
cin>>a2[i]>>b2[i];
}
sort(a1+1,a1+1+m1);
sort(a2+1,a2+1+m2);
for (int i=1;i<=m1;i++) {
for (int j=1;j<=n;j++) {
if (a1[i]>ans1[j]) {
ans1[j]=b1[i];
as1[j]++;
break;
}
}
}
for (int i=1;i<=m2;i++) {
for (int j=1;j<=n;j++) {
if (a2[i]>ans2[j]) {
ans2[j]=b2[i];
as2[j]++;
break;
}
}
}
for (int i=1;i<=n;i++) {
as1[i]+=as1[i-1];
cout<<as2[i]<<" ";//as2[1],as2[2]
as2[i]+=as2[i-1];
}
for (int i=0;i<=n;i++) {
ans=max(ans,as1[i]+as2[n-i]);
}
cout<<ans;
return 0;
}