CF1214E 我将sort cmp函数由
改为
后,AC->WA on test#7
要得到单调不增的序列,看起来好像是等价的,求助为什么一个WA一个AC
附上代码
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int read(){
int x=0,f=1;
char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x*f;
}
const int N = 5e5+4;
struct D{
int d,id;
}e[N];
int n,u[N],v[N],f[N],tot=0,ans[N];
bool cmp(D x,D y){
return x.d > y.d;
}
int main(){
n = read();
for(int i=1;i<=n;i++){
e[i].d = read() , e[i].id = i;
}
sort(e+1,e+n+1,cmp);
for(int i=1;i<=n;i++){
ans[i*2-1] = e[i].id * 2 - 1;
ans[i*2] = e[i].id * 2;
}
for(int i=1;i<n;i++){//连i*2-1 000000
// cout << e[i].id*2-1<<' '<<e[i].id*2+1<<endl;
u[++tot] = i*2-1;v[tot] = i*2+1;
}
int cnt = 0;
for(int i=1;i<=n;i++){
f[++cnt] = i*2-1;
}
for(int i=1;i<=n;i++){//连i*2
if(cnt - i + 1 == e[i].d){
u[++tot] = f[cnt] , v[tot] = i*2;
f[++cnt] = i*2;
}
else{
u[++tot] = f[e[i].d+i-1],v[tot] = i*2;
}
}
for(int i=1;i<=2*n-1;i++){
printf("%d %d\n",ans[u[i]],ans[v[i]]);
}
return 0;
}