NOIP模拟 排列【权值线段树】
来源:互联网 发布:网络人软件 编辑:程序博客网 时间:2024/05/22 11:38
题目大意:
对于一个1到n的排列,若知道每一位的逆序数(第i位a[i]的逆序数就是a[1]~a[i-1]中比a[i]大的数的个数),则能求出原排列。
现在对于排列{a[i]},给出{p[i]}。p[i]表示a[1]~a[i]的逆序数和。请你求出原排列。(1<=n<=100000)
解题思路:
先求出每个数的逆序数,仍设为p[i],倒着确定,那对于最后一个未确定的数a[i]来说,它前面有p[i]个比它大的数,所以他就是剩下未确定的中的第i-p[i]小的数,用权值线段树维护即可。
#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>#include<cmath>#include<vector>#include<queue>#define ll long longusing namespace std;int getint(){ int i=0,f=1;char c; for(c=getchar();(c<'0'||c>'9')&&c!='-';c=getchar()); if(c=='-')f=-1,c=getchar(); for(;c>='0'&&c<='9';c=getchar())i=(i<<3)+(i<<1)+c-'0'; return i*f;}ll getll(){ ll i=0,f=1;char c; for(c=getchar();(c<'0'||c>'9')&&c!='-';c=getchar()); if(c=='-')f=-1,c=getchar(); for(;c>='0'&&c<='9';c=getchar())i=i*10+c-'0'; return i*f;}const int N=100005;int n,a[N],tr[N<<2];ll p[N];void build(int k,int l,int r){ if(l==r) { tr[k]=1; return; } int mid=l+r>>1; build(k<<1,l,mid),build(k<<1|1,mid+1,r); tr[k]=tr[k<<1]+tr[k<<1|1];}int query(int k,int l,int r,int num){ if(l==r) { tr[k]=0; return l; } int mid=l+r>>1,res; if(num<=tr[k<<1])res=query(k<<1,l,mid,num); else res=query(k<<1|1,mid+1,r,num-tr[k<<1]); tr[k]=tr[k<<1]+tr[k<<1|1]; return res;}int main(){ //freopen("premu.in","r",stdin); //freopen("premu.out","w",stdout); n=getint(); for(int i=1;i<=n;i++)p[i]=getll(); for(int i=n;i;i--)p[i]-=p[i-1]; for(int i=1;i<=n;i++)p[i]=i-p[i]; build(1,1,n); for(int i=n;i;i--) a[i]=query(1,1,n,p[i]); for(int i=1;i<=n;i++) cout<<a[i]<<' '; return 0;}
阅读全文
0 0
- NOIP模拟 排列【权值线段树】
- NOIP模拟题 [模拟][DP][线段树]
- NOIP 模拟题 排列
- 【NOIP模拟】被粉碎的线段树
- EZOI NOIP模拟赛 线段树
- [NOIP模拟题][树状数组][线段树]
- 【NOIP模拟题】[状压dp][线段树]
- NOIP模拟 shopping【线段树 or Splay】
- NOIP模拟 序列操作【线段树】
- [NOIP模拟赛]排列问题
- 【NOIP模拟】 (11.3) T2 排列
- 10.27NOIP 2016模拟赛 三部曲 树链剖分+线段树
- 【NOIP模拟题】【线段树】【树链剖分】发放粮食题解
- [NOIP模拟题][杂题][状压DP][DFS序][线段树]
- 【noip模拟题】[dp][二分][树链剖分][hdu5029][线段树]
- 【DFS序】【线段树】【选派士兵】【noip模拟题】
- [NOIP模拟][状压dp][dfs序列][线段树]
- 【NOIP模拟题】【线段树】2016.11.10第三题题解
- Halcon笔记
- 当spring 容器初始化完成后执行某个方法
- Android 联系人数据库介绍以及对联系人的基本操作
- 爬虫基本工作原理
- 随机森林在Kaggle实例:Titanic中的应用(一)
- NOIP模拟 排列【权值线段树】
- Spring-boot:快速搭建微服务框架
- B
- clock_gettime获取时间
- 301. Remove Invalid Parentheses
- 基于PCA的ORL人脸库特征抽取
- 阿里云服务器配置 之 远程连接 因 一下三条原因无法连接
- android studio配置GreenDao3.2.2
- P