uva - 11525 Permutation

来源:互联网 发布:淘宝店铺图片 编辑:程序博客网 时间:2024/05/25 21:35
#include <cstring>#include <cstdio>#include <iostream>#include <algorithm>using namespace std;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1const int maxn = 50110;int vis[maxn<<2];void build(int l,int r,int rt){vis[rt]=0;if(l==r) return ;int m=(l+r)>>1;build(lson);build(rson);}void pushup(int l,int r,int rt){vis[rt]=vis[rt<<1]+vis[rt<<1|1];}int ans;void update(int l,int r,int rt,int posi){if(l==r){    vis[rt]=1; ans=r;    return ;}int m=(l+r)>>1;if(vis[rt<<1]+posi<=m-l+1) update(lson,posi);else update(rson,posi-m+l-1+vis[rt<<1]);pushup(l,r,rt);}int n;int main(){    int T;    scanf("%d",&T);    while(T--){        scanf("%d",&n);        build(1,n,1);        for(int i=1;i<=n;i++){            int posi;            scanf("%d",&posi);            posi++;            update(1,n,1,posi);            if(i!=1) printf(" ");            printf("%d",ans);        }        printf("\n");    }    return 0;}

0 0
原创粉丝点击