题目:给你n对 (ai bi) 这些数进行重排 使其满足
思路:分两种情况 ai>bi 和bi>ai 所以就是看这两种谁的对数多
可以证明 所有的ai>bi都满足
a1>b1
a2>b2
a3>b3 将他们按照升序进行排列 b1<b2 && a2>b2 所有 a1>b1<a2 ...
同理 ai<bi 满足另一个方式
#include<bits/stdc++.h>
using namespace std;
const int maxn=3e5+10;
struct node{
int id;
int l,r;
}amax[maxn],amin[maxn];// max 从大到小 先排右 min 从小到大 先排左
int cmpmax(node a,node b)
{
return a.r<b.r;
}
int cmpmin(node a,node b)
{
return a.l>b.l;
}
int main()
{
queue<int>q1,q2;
int n;
cin>>n;
int cntmax=0;
int cntmin=0;
for(int i=1;i<=n;i++)
{
int l,r;
cin>>l>>r;
if(l<r)
{
amin[++cntmin].l=l;
amin[cntmin].r=r;
amin[cntmin].id=i;
}
if(l>r)
{
amax[++cntmax].l=l;
amax[cntmax].r=r;
amax[cntmax].id=i;
}
}
sort(amin+1,amin+1+cntmin,cmpmin);
sort(amax+1,amax+1+cntmax,cmpmax);
if(cntmin>=cntmax)
{
cout<<cntmin<<endl;
for(int i=1;i<=cntmin;i++)
{
cout<<amin[i].id<<" ";
}
cout<<endl;
}
else
{
cout<<cntmax<<endl;
for(int i=1;i<=cntmax;i++)
{
cout<<amax[i].id<<" ";
}
cout<<endl;
}
return 0;
}