贪心,用了点没必要的差分,最后用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; }