题目链接:点击查看

题目大意:给出 n 个数,分别表示数列 p 前缀 [ 1 , i ] 的逆序对个数,现在要求还原数列 p

题目分析:设 a[ i ] 为前缀 [ 1 , i ] 的逆序对个数,则 a[ i ] - a[ i - 1 ] 代表的就是 p[ i ] 前面有 a[ i ] - a[ i - 1 ] 数比他自己大,换句话说,p[ i ] 就是目前的第 a[ i ] - a[ i - 1 ] + 1 大的数,用线段树倒着维护就好了

代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
using namespace std;typedef long long LL;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const int N=1e5+100;int a[N],ans[N];struct Node
{int l,r,sum;
}tree[N<<2];void build(int k,int l,int r)
{tree[k].l=l;tree[k].r=r;tree[k].sum=r-l+1;if(l==r)return;int mid=l+r>>1;build(k<<1,l,mid);build(k<<1|1,mid+1,r);
}int query(int k,int pos)
{tree[k].sum--;if(tree[k].l==tree[k].r)return tree[k].l;int mid=tree[k].l+tree[k].r>>1;if(tree[k<<1|1].sum>=pos)return query(k<<1|1,pos);elsereturn query(k<<1,pos-tree[k<<1|1].sum);
}int main()
{
#ifndef ONLINE_JUDGE
//  freopen("data.in.txt","r",stdin);
//  freopen("data.out.txt","w",stdout);
#endif
//  ios::sync_with_stdio(false);int w;cin>>w;while(w--){int n;scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",a+i);build(1,1,n);for(int i=n;i>=1;i--)ans[i]=query(1,a[i]-a[i-1]+1);printf("%d",ans[1]);for(int i=2;i<=n;i++)printf(" %d",ans[i]);puts("");}return 0;
}

HDU - 5592 ZYBs Premutation(线段树,逆序对)相关推荐

  1. hdu 3397 Sequence operation(线段树,lazy,区间合并)

    hdu 3397 Sequence operation 线段树lazy和区间合并结合的一个题,相当于几个题集中到一起嘛,分开想就好了 0,1,2操作都要lazy,2的异或操作找到每一只含1或只含0的区 ...

  2. 2016 Multi-University Training Contest 10 [HDU 5861] Road (线段树:区间覆盖+单点最大小)...

    HDU 5861 题意 在n个村庄之间存在n-1段路,令某段路开放一天需要交纳wi的费用,但是每段路只能开放一次,一旦关闭将不再开放.现在给你接下来m天内的计划,在第i天,需要对村庄ai到村庄bi的道 ...

  3. hdu 2871 Memory Control(线段树)

    题目链接:hdu 2871 Memory Control 题目大意:模拟一个内存分配机制. Reset:重置,释放全部空间 New x:申请内存为x的空间,输出左地址 Free x:释放地址x所在的内 ...

  4. HDU 4031 Attack(线段树/树状数组区间更新单点查询+暴力)

    Attack Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others) Total Sub ...

  5. HDU 4262 Juggler (模拟+线段树优化)

    转载请注明出处,谢谢http://blog.csdn.net/acm_cxlove/article/details/7854526       by---cxlove http://acm.hdu.e ...

  6. HDU 5669 Road(线段树建树)(分层图最短路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5669 [分析]线段树建树+分层图最短路 #include <cstdio> #includ ...

  7. HDU - I Hate It(线段树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754 Time Limit: 9000/3000 MS (Java/Others) Memory Li ...

  8. 洛谷P5149——会议座位【字典树 + 逆序对】

    洛谷P5149--会议座位 大致思路:我们先用字典树把单词存起来,在每个单词的末尾节点给这个单词按照出现顺序标号,然后在查找的过程中,把其出现顺序用一个数组一次存起来,然后求这个数组的逆序对即可. # ...

  9. HDU - 3333 Turing Tree 线段树区间不同值和+详解+思想

    传送门 首先第一次做这种求不同元素和的线段树题,猜想是个裸题.但是题目中有一句话显然给题目降低了很大的难度,就是 想想其实它就是在暗示你这道题你要结合多次询问来处理,也就是所谓的离线,而不是一次一次的 ...

最新文章

  1. 【AIX 命令学习】创建逻辑卷!
  2. 按字段顺序加载或解析JSON对象
  3. 禁止遮罩层以下屏幕滑动----正解(更新版)
  4. GDCM:提取DICOM文件的加密内容到der文件的测试程序
  5. CDH集群安装配置(四)- mysql 的安装
  6. 详解4种经典的限流算法
  7. linux (centos7)安装3.7.8
  8. 新松机器人产业小镇_机器人行业迎来拐点,新松机器人如何“过冬”?丨亿欧读财报...
  9. 美团 大规模商品知识图谱的构建与应用
  10. 罗翔 ---- 落俗不可避免,浪漫至死不渝
  11. 利用HBuilderX制作手机APP应用程序之知识问答
  12. python查找一段字符串中是否包含指定字符串
  13. c#中,如何获取日期型字段里的年、月、日?
  14. 深度学习Tir-Hi3559A使用unbuntu系统
  15. 蜘蛛采集单域名网站克隆镜像源码
  16. python tqdm的用法_【转】Python进度条tqdm的使用
  17. 机器学习笔记 - 什么是高斯混合模型(GMM)?
  18. 如何通过网页超链接控制电脑应用程序
  19. linux vad检测,VAD树结构体的属性以及遍历
  20. ^^^ 存货盘盈盘亏的账务处理 Accounting for Inventory Profit and Inventory Loss with Goods Stock...

热门文章

  1. android注解的作用,Android 用注解来提升代码质量
  2. 同样的sql在两个oracle,sql – 从两个会话INSERT到唯一列相同的值(Oracle)
  3. Nginx开启SSL支持实例配置
  4. Nginx的location指令
  5. Dockerfile常用指令
  6. container常见操作
  7. BaseExecutor.query()-创建CacheKey
  8. 文件上传之Springmvc方式上传代码
  9. Concurrent集合 Atomic类
  10. 元素的选中问题 元素选中的问题 切换复选框选中 全选和全不选