如下代码,样例3(在开了O2的情况下)用了 1.58s(文件输入输出),照说应该T飞掉,但是评测结果最慢只跑了 800ms。求问是什么玄学原因(是本机原因还是其他原因)。
#include<bits/stdc++.h>
#define int long long
using namespace std;
struct node{
int score,rk;
}tmp[200000+5];
int n;
int a[200000+5],b[200000+5],c[200000+5];
map<int,int> mp[4];
int cnt;
int t;
inline int read(){
int n=0;
int f=1;
char c=getchar();
while(c<'0'||c>'9'){
if(c=='-') f=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
n=(n<<3)+(n<<1)+(c^48);
c=getchar();
}
return n*f;
}
inline void write(int x){
if(x<0){
putchar('-');
x=-x;
}
if(x>9) write(x/10);
putchar((x%10)^48);
return;
}
bool cmp(node x,node y){
return x.score>y.score;
}
signed main(){
// freopen("medal.in","r",stdin);
// freopen("medal.out","w",stdout);
n=read();
for(int i=1;i<=n;i++) a[i]=read(),b[i]=read(),c[i]=read(),mp[1][a[i]]++,mp[2][b[i]]++,mp[3][c[i]]++;
for(int k=1;k<=3;k++){
cnt=0;
for(map<int,int>::iterator it=mp[k].begin();it!=mp[k].end();it++){
cnt++;
tmp[cnt].score=(*it).first;
tmp[cnt].rk=(*it).second;
}
sort(tmp+1,tmp+1+cnt,cmp);
t=tmp[1].rk;
tmp[1].rk=1;
for(int i=2;i<=cnt;i++) swap(t,tmp[i].rk),tmp[i].rk+=tmp[i-1].rk;
for(int i=1;i<=cnt;i++) mp[k][tmp[i].score]=tmp[i].rk;
}for(int i=1;i<=n;i++) write(min(mp[1][a[i]],min(mp[2][b[i]],mp[3][c[i]]))),puts("");
return 0;
}