记录编号 597931 评测结果 AAAAAAAAAA
题目名称 逆序列 最终得分 100
用户昵称 Gravatar健康铀 是否通过 通过
代码语言 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;
}