记录编号 |
597931 |
评测结果 |
AAAAAAAAAA |
题目名称 |
逆序列 |
最终得分 |
100 |
用户昵称 |
健康铀 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.875 s |
提交时间 |
2024-12-21 13:47:25 |
内存使用 |
4.99 MiB |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int a[500010],b[500010],s[500010],n,ans;
void cr(int x,int y){
for(;x<=n;x+=x&-x)
s[x]+=y;
}
int cx(int x){
int ans=0;
for(;x;x-=x&-x)
ans+=s[x];
return ans;
}
int main(){
freopen("nxl.in","r",stdin);
freopen("nxl.out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
a[i]++;
cr(i,1);
}
for(int i=1;i<=n;i++){
int l=1,r=n,mid;
while(l<=r){
mid=(l+r)/2;
int num=cx(mid);
if(num==a[i]&&b[mid]==0){
break;
}
else if(num>=a[i]){
r=mid-1;
}
else{
l=mid+1;
}
}
b[mid]=i;
cr(mid,-1);
}
for(int i=1;i<=n;i++){
cout<<b[i]<<" ";
}
return 0;
}