hdu 4777 Queue
题目大意:
一些人,每个人的身高都是不一样的
然后再给你一个k,表示这个人的左边或者右边,有k个人比他高
然后让你构造一个满足条件且字典序最小的序列
思路:
按照权值排序 这样每次加进去后只有后面的才会比它大
加的时候需要在前面或后面留出k个空间
选出位置靠前的那个加入使字典序最小
如果两个位置都被占即无解
然后用线段树维护一下区间和即可
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
#define inf 2139062143
#define ll long long
#define MAXN 100100
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-;ch=getchar();}
while(isdigit(ch)) {x=x*+ch-'';ch=getchar();}
return x*f;
}
int n,sum[MAXN<<],ans[MAXN];
struct data
{
int val,k;
bool operator < (const data &a) const
{
return val<a.val;
}
}g[MAXN];
void build(int k,int l,int r)
{
sum[k]=r-l+;
if(l==r) return ;
int mid=(l+r)>>;
build(k<<,l,mid);build(k<<|,mid+,r);
}
int mdf(int k,int x,int l,int r)
{
sum[k]--;
if(l==r)
if(sum[k]+) return l;
else return ;
int mid=(l+r)>>;
if(x<=sum[k<<]) return mdf(k<<,x,l,mid);
else return mdf(k<<|,x-sum[k<<],mid+,r);
}
int main()
{
int T=read();
for(int t=;t<=T;t++)
{
printf("Case #%d: ",t);
n=read();
for(int i=;i<=n;i++) g[i].val=read(),g[i].k=read()+;
sort(g+,g+n+);
build(,,n);
for(int i=,r=n,x,y;i<=n;i++,r--)
{
if((x=mdf(,min(g[i].k,r-g[i].k+),,n))&&min(g[i].k,r-g[i].k+)>=&&min(g[i].k,r-g[i].k+)<=r) ans[x]=g[i].val;
else if(y=mdf(,max(g[i].k,r-g[i].k+),,n)&&min(g[i].k,r-g[i].k+)>=&&min(g[i].k,r-g[i].k+)<=r) ans[y]=g[i].val;
else {puts("impossible");goto ed;}
}
for(int i=;i<n;i++) printf("%d ",ans[i]);printf("%d\n",ans[n]);
ed:;
}
}
hdu 4777 Queue的更多相关文章
- hdu 4777 树状数组+合数分解
Rabbit Kingdom Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- HDU 4777 Rabbit Kingdom(树状数组)
HDU 4777 Rabbit Kingdom 题目链接 题意:给定一些序列.每次询问一个区间,求出这个区间和其它数字都互质的数的个数 #include <cstdio> #include ...
- HDU 5493 Queue 树状数组
Queue Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5493 Des ...
- 【线段树】HDU 5493 Queue (2015 ACM/ICPC Asia Regional Hefei Online)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5493 题目大意: N个人,每个人有一个唯一的高度h,还有一个排名r,表示它前面或后面比它高的人的个数 ...
- P - 区间与其他数互质数的个数 HDU - 4777
Rabbit Kingdom Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- HDU 4777 Rabbit Kingdom (2013杭州赛区1008题,预处理,树状数组)
Rabbit Kingdom Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- HDU 4441 Queue Sequence(splay)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4441 题意:一个数列,三种操作:(1)插入:找到没在当前数列中的最小的正整数i,将其插在位置p之后,并 ...
- HDU 4441 Queue Sequence
http://acm.hdu.edu.cn/showproblem.php?pid=4441 题意:对于一个序列,每次有三种操作 insert pos 表示在pos插入一个数,这个数是最小的正数 ...
- HDU 4777 Rabbit Kingdom 树状数组
分析:找到每一个点的左边离他最近的不互质数,记录下标(L数组),右边一样如此(R数组),预处理 这个过程需要分解质因数O(n*sqrt(n)) 然后离线,按照区间右端点排序 然后扫一遍,对于当前拍好顺 ...
随机推荐
- ruby on rails使用gmail的smtp发送邮件
参考至http://guides.rubyonrails.org/action_mailer_basics.html 在gmail账户的安全里先开启两步验证(链接:https://myaccount. ...
- pycharm中提交Git 忽略部分代码
痛点: 项目中,有些配置项,或者比较隐私的东东,不想上传 解决:在项目根路径下,创建.gitignore 文件 文件中可以写文件名.文件路径等 结果: 提交到git,发现果真没有dbconne ...
- jmeter 性能插件
mv jmeter-plugins-manager-0.16.jar /usr/local/Cellar/jmeter/3.1/libexec/lib/ext http://www.cnblogs.c ...
- js 列表几种循环的比较
数组 遍历 普通遍历 最简单的一种,也是使用频率最高的一种. let arr = ['a', 'b', 'c', 'd', 'e'] for (let i = 0; i < arr.length ...
- RS232
RS232的最大的传输速率大约10KBytes/s. 全双工工作方式,异步.数据是8位作为一块来发送的,先发送最低位,最后发送最高位. 在232通信中: Both side of the cable ...
- winfrom Panel 问题
Panel 图片自适应 BackgroundImageLayout 设置成Zoom就行 Panel动态换图片时候的闪烁问题: 首先创建一个自己的panel类: using System; using ...
- [BZOJ1029] [JSOI2007]建筑抢修(贪心 + 优先队列)
传送门 把数据存在结构体中,至于怎么贪心? 肯定会有些想法,正确错误先不必说,先来试一试. 1.按照 t2 为第一关键字从小到大排,按照 t1 为第二关键字从小到大排 这个显然错,比如后面有个数的 t ...
- Django组件:(6)cookie 和 session
会话:会话可理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应:在JavaWeb中,客户向某一服务器发出第一个请求开始,会话就开始了,直到客户关闭了浏览器会话结束. 在一个会话的 ...
- 【JZOJ4857】Tourist Attractions(Bitset)
题意:给定一个n个点的无向图,求这个图中有多少条长度为4的简单路径. n<=1500 思路: #include<map> #include<set> #include&l ...
- .net如何统计在线人数
原文发布时间为:2008-10-17 -- 来源于本人的百度文章 [由搬家工具导入] 统计在线用户的作用不言而喻,就是为了网站管理者可以知道当前用户的多少,然后根据用户数量来观察服务器或者程序的性能, ...