a1212121

时间:2023-11-18 20:13:41 分类:

#include<iostream>

#include<algorithm>

bool cmp(int x,int y)

{

return x>y;//可以简单理解为:>降序,<升序; 

}

using namespace std;

int main()

{

int a[100001],b[100001],n;

cin>>n;

for(int i=0;i<n;i++){

scanf("%d",&a[i]);

b[i]=a[i];

sort(a,a+n,cmp);//倒序排序 

//for(int i=0;i<n;i++) cout<<a[i]<<endl;

for(int i=0;i<n;i++){

int left=0,right=n-1;

int mid=(left+right)/2;

while(left<=right){

if(b[i]>a[mid]) right=mid;

if(b[i]<a[mid]) left=mid;

if(b[i]==a[mid]){

if(b[i]==a[mid-1]){

mid--;

continue;

}//多个相同成绩取第一个成绩为排名,用continue继续循环,

//不能在下面执行 mid=(left+right)/2;否则mid--无效了;

else break;

}

mid=(left+right)/2;

if(b[i]<a[mid]&&mid==n-2){

mid++;

break;//最后一名的下标永远在倒数第二名,(3+4)/2=3;要特殊处理; 

}

//cout<<left<<' '<<right<<endl;

}

printf("%d\n",mid+1);

}

}