贪心,用了点没必要的差分,最后用sort排序输出就好
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
bool cmp(vector<int> a,vector<int>b){
return a[0]>b[0];
}
bool cmp1(vector<int> a,vector<int>b){
return a[1]<b[1];
}
int m,n,k,l,d;
int main(){
cin>>m>>n>>k>>l>>d;
vector<vector<int>> row(m+1,vector<int>(2)),col(n+1,vector<int>(2));
int x1,y1,x2,y2;
for(int i = 0;i < d;i++) {
cin>>x1>>y1>>x2>>y2;
if(x1 == x2){
if(y1 > y2) swap(y1,y2);
col[y1][0]++;
col[y2][0]--;
}
else{
if(x1 > x2) swap(x1,x2);
row[x1][0]++;
row[x2][0]--;
}
}
row[0][1] = 0;col[0][1] = 0;
for(int i = 1;i < max(row.size(),col.size());i++) {
if( i < row.size()){
row[i][0] += row[i-1][0];
row[i][1] = i;
}
if( i < col.size()){
col[i][0] += col[i-1][0];
col[i][1] = i;
}
}
sort(row.begin(),row.end(),cmp);
sort(col.begin(),col.end(),cmp);
sort(row.begin(),row.begin() + k,cmp1);
sort(col.begin(),col.begin() + l,cmp1);
for(int i = 0;i<k;i++){
if(i) cout<<" ";
cout<<row[i][1];
}
cout<<endl;
for(int i = 0;i<l;i++){
if(i) cout<<" ";
cout<<col[i][1];
}
cout<<endl;
return 0;
}

京公网安备 11010502036488号