题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=5592

题意:

http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=654&pid=1003

题解:

对给的n个数做差分,即a[i]=a[i]-a[i-1],然后对做完差分之后的数组从后往前扫一遍(最后一个数就是代表整个序列中比它大的数有a[n-1]个,即,它是第a[n-1]+1大的数),每次求还未求出的数中的第(a[i]+1)大(第1大就是最大的意思)。

代码:

线段树:

 #include<iostream>
#include<cstdio>
#include<cstring>
#define lson (o<<1)
#define rson ((o<<1)|1)
#define M (l+(r-l)/2)
using namespace std; const int maxn=+; int n,arr[maxn],ans[maxn]; int sumv[maxn<<]; void build(int o,int l,int r){
if(l==r){
sumv[o]=;
}else{
build(lson,l,M);
build(rson,M+,r);
sumv[o]=sumv[lson]+sumv[rson];
}
} int _ret;
void query(int o,int l,int r,int k){
if(l==r){
_ret=l;
sumv[o]=;
}else{
if(sumv[rson]>=k) query(rson,M+,r,k);
else query(lson,l,M,k-sumv[rson]);
sumv[o]=sumv[lson]+sumv[rson];
}
} int main(){
int tc;
scanf("%d",&tc);
while(tc--){
scanf("%d",&n);
build(,,n);
for(int i=;i<n;i++) scanf("%d",arr+i);
for(int i=n-;i>;i--) arr[i]-=arr[i-];
for(int i=n-;i>=;i--){
query(,,n,arr[i]+);
ans[i]=_ret;
}
for(int i=;i<n-;i++) printf("%d ",ans[i]);
printf("%d\n",ans[n-]);
}
return ;
}

二分+树状数组:

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define M (low+(hig-low)/2)
using namespace std; const int maxn=+; int n,arr[maxn],ans[maxn]; int sumv[maxn]; void add(int p,int x){
while(p<=n){
sumv[p]+=x;
p+=p&(-p);
}
} int sum(int p){
int ret=;
while(p>){
ret+=sumv[p];
p-=p&(-p);
}
return ret;
}
//lower_bound
int solve(int k){
int low=,hig=n;
while(low+<hig){
if(sum(M)<k) low=M;
else hig=M;
}
add(hig,-);
return hig;
} void init(){
memset(sumv,,sizeof(sumv));
} int main(){
int tc;
scanf("%d",&tc);
while(tc--){
scanf("%d",&n);
init();
for(int i=;i<=n;i++) add(i,);
for(int i=;i<n;i++) scanf("%d",arr+i);
for(int i=n-;i>;i--) arr[i]-=arr[i-];
for(int i=n-;i>=;i--){
ans[i]=solve(i+-arr[i]);
}
for(int i=;i<n-;i++) printf("%d ",ans[i]);
printf("%d\n",ans[n-]);
}
return ;
}

HDU 5592 ZYB's Premutation的更多相关文章

  1. hdu 5592 ZYB's Premutation (权值线段树)

    最近在线段树的世界里遨游,什么都能用线段树做,这不又一道权值线段树了么. ZYB's Premutation Time Limit: 2000/1000 MS (Java/Others)    Mem ...

  2. HDU 5592——ZYB's Premutation——————【线段树单点更新、单点查询】

    ZYB's Premutation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Othe ...

  3. Bestcoder round #65 && hdu 5592 ZYB's Premutation 线段树

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submissio ...

  4. HDU 5592 ZYB's Premutation(树状数组+二分)

    题意:给一个排列的每个前缀区间的逆序对数,让还原 原序列. 思路:考虑逆序对的意思,对于k = f[i] - f[i -1],就表示在第i个位置前面有k个比当前位置大的数,那么也就是:除了i后面的数字 ...

  5. HDU - 5592 ZYB's Premutation (权值线段树)

    题意:给出序列前k项中的逆序对数,构造出这个序列. 分析:使用权值线段树来确定序列元素. 逆序对的数量肯定是递增的,从最后一个元素开始逆向统计,则\(a[i] - a[i-1]\)即位置i之前比位置i ...

  6. hdu 5592 ZYB's Premutation(线段树优化)

    设f_if​i​​是第ii个前缀的逆序对数,p_ip​i​​是第ii个位置上的数,则f_i-f_{i-1}f​i​​−f​i−1​​是ii前面比p_ip​i​​大的数的个数.我们考虑倒着做,当我们处理 ...

  7. hdu 5592 ZYB's Game 树状数组

    ZYB's Game Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=55 ...

  8. HDU 5592 ZYB's Game 【树状数组】+【二分】

    <题目链接> 题目大意: 给你一个由1~n,n个数组成的序列,给出他们每个的前缀逆序数,现在要求输出这个序列. 解题分析: 由前缀逆序数很容易能够得到每个数的逆序数.假设当前数是i,它前面 ...

  9. ZYB's Premutation(有逆序数输出原序列,线段树)

    ZYB's Premutation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Othe ...

随机推荐

  1. CentOS 6.4安装Kangle面板

    kangle web server一键安装包是一个用Linux Shell编写的可以为CentOS 6 VPS(VDS)或独立主机安装kangle web server(kangle,easypane ...

  2. What is the difference between differed processing mode and interactive mode?

     Every time you access and navigate through the fields on a page in PeopleSoft there are events such ...

  3. 一、MongoDB的下载、安装与部署

    1.什么是MongoDB? 它是介于关系型数据库和非关系型数据库之间的一种NoSQL数据库,用C++编写,是一款集敏捷性.可伸缩性.扩展性于一身的高性能的面向文档的通用数据库. 2.为什么要用Mong ...

  4. PHP通过IP 获取 地理位置(实例)

    发布:JB02   来源:脚本学堂  分享一例php代码,实现通过IP地址获取访问者的地理位置,在php编程中经常用到,有需要的朋友参考下吧.本节内容:PHP通过IP获取地理位置 例子: 复制代码代码 ...

  5. JS预览图像

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...

  6. Android Socket通信

    1.TCP: xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns: ...

  7. 【转】DCC32的参数详解

    完整的内容如下: // DCC32编译器的设置说明. // Dcc32 [options] filename [options] // DCC32 [操作选项] 文件名称 [操作选项] // -A&l ...

  8. openerp 经典收藏 记录规则 – 销售只能看到自己的客户,经理可以看到全部(转载)

    记录规则 – 销售只能看到自己的客户,经理可以看到全部 原文地址:http://cn.openerp.cn/record_rule/ OpenERP中的权限管理有四个层次: 菜单级别: 即,不属于指定 ...

  9. Microsoft Power BI Designer

    1/25/2015年1月25发布的预览版本,可以通过以下地址下载,注意有x64 和x32 版本区别(和上次PowerMap一样,一般也推荐的使用x64版本) http://www.microsoft. ...

  10. android EditText获取光标位置并安插字符删除字符

    android EditText获取光标位置并插入字符删除字符1.获取光标位置int index = editText.getSelectionStart(); 2.在光标处插入字符int index ...