HDU - 5592 ZYBs Premutation(线段树,逆序对)
题目链接:点击查看
题目大意:给出 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(线段树,逆序对)相关推荐
- hdu 3397 Sequence operation(线段树,lazy,区间合并)
hdu 3397 Sequence operation 线段树lazy和区间合并结合的一个题,相当于几个题集中到一起嘛,分开想就好了 0,1,2操作都要lazy,2的异或操作找到每一只含1或只含0的区 ...
- 2016 Multi-University Training Contest 10 [HDU 5861] Road (线段树:区间覆盖+单点最大小)...
HDU 5861 题意 在n个村庄之间存在n-1段路,令某段路开放一天需要交纳wi的费用,但是每段路只能开放一次,一旦关闭将不再开放.现在给你接下来m天内的计划,在第i天,需要对村庄ai到村庄bi的道 ...
- hdu 2871 Memory Control(线段树)
题目链接:hdu 2871 Memory Control 题目大意:模拟一个内存分配机制. Reset:重置,释放全部空间 New x:申请内存为x的空间,输出左地址 Free x:释放地址x所在的内 ...
- HDU 4031 Attack(线段树/树状数组区间更新单点查询+暴力)
Attack Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Others) Total Sub ...
- HDU 4262 Juggler (模拟+线段树优化)
转载请注明出处,谢谢http://blog.csdn.net/acm_cxlove/article/details/7854526 by---cxlove http://acm.hdu.e ...
- HDU 5669 Road(线段树建树)(分层图最短路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5669 [分析]线段树建树+分层图最短路 #include <cstdio> #includ ...
- HDU - I Hate It(线段树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754 Time Limit: 9000/3000 MS (Java/Others) Memory Li ...
- 洛谷P5149——会议座位【字典树 + 逆序对】
洛谷P5149--会议座位 大致思路:我们先用字典树把单词存起来,在每个单词的末尾节点给这个单词按照出现顺序标号,然后在查找的过程中,把其出现顺序用一个数组一次存起来,然后求这个数组的逆序对即可. # ...
- HDU - 3333 Turing Tree 线段树区间不同值和+详解+思想
传送门 首先第一次做这种求不同元素和的线段树题,猜想是个裸题.但是题目中有一句话显然给题目降低了很大的难度,就是 想想其实它就是在暗示你这道题你要结合多次询问来处理,也就是所谓的离线,而不是一次一次的 ...
最新文章
- 【AIX 命令学习】创建逻辑卷!
- 按字段顺序加载或解析JSON对象
- 禁止遮罩层以下屏幕滑动----正解(更新版)
- GDCM:提取DICOM文件的加密内容到der文件的测试程序
- CDH集群安装配置(四)- mysql 的安装
- 详解4种经典的限流算法
- linux (centos7)安装3.7.8
- 新松机器人产业小镇_机器人行业迎来拐点,新松机器人如何“过冬”?丨亿欧读财报...
- 美团 大规模商品知识图谱的构建与应用
- 罗翔 ---- 落俗不可避免,浪漫至死不渝
- 利用HBuilderX制作手机APP应用程序之知识问答
- python查找一段字符串中是否包含指定字符串
- c#中,如何获取日期型字段里的年、月、日?
- 深度学习Tir-Hi3559A使用unbuntu系统
- 蜘蛛采集单域名网站克隆镜像源码
- python tqdm的用法_【转】Python进度条tqdm的使用
- 机器学习笔记 - 什么是高斯混合模型(GMM)?
- 如何通过网页超链接控制电脑应用程序
- linux vad检测,VAD树结构体的属性以及遍历
- ^^^ 存货盘盈盘亏的账务处理 Accounting for Inventory Profit and Inventory Loss with Goods Stock...