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)) 然后离线,按照区间右端点排序 然后扫一遍,对于当前拍好顺 ...
随机推荐
- squid正向代理使用
环境: Squid Cache: Version 3.5.20 操作系统: centos7.6 squid安装配置 yum install -y squid systemctl start sq ...
- LeetCode(50) Pow(x,n)
题目 Implement pow(x, n). Show Tags Show Similar Problems 分析 一个不利用标准幂次函数的,求幂算法实现. 参考了一个很好的解析博客:Pow(x,n ...
- ARM中的---汇编指令
一. 带点的(一般都是ARM GNU伪汇编指令) 1. ".text".".data".".bss" 依次表示的是"以下是代码段& ...
- Linux学习笔记02
1.文件处理命令:touch touch [文件目录][文件名] 如:touch /tmp/jiejie/jiejie.conf2.文件处理命令:cat cat 参数[文件目录][文件名]//显示文件 ...
- english & utils & tools
english & utils & tools https://openlanguage.com/ https://www.grammarly.com/blog/email-writi ...
- Github上600多个iOS开源项目分类及介绍
将Github上600多个iOS开源项目进行分类并且有相应介绍,小伙伴们快来看呀 地址:http://github.ibireme.com/github/list/ios/
- msp430入门编程0
msp430单片机最小系统 msp430入门学习 msp430入门编程
- 2018牛客网暑期ACM多校训练营(第一场)D图同构,J
链接:https://www.nowcoder.com/acm/contest/139/D来源:牛客网 同构图:假设G=(V,E)和G1=(V1,E1)是两个图,如果存在一个双射m:V→V1,使得对所 ...
- cogs——619. [金陵中学2007] 传话
619. [金陵中学2007] 传话 ★★ 输入文件:messagez.in 输出文件:messagez.out 简单对比时间限制:1 s 内存限制:128 MB [问题描述] 兴趣小 ...
- JDBC的事务
以下内容引用自http://wiki.jikexueyuan.com/project/jdbc/transactions.html: 如果JDBC连接是处于自动提交模式下,该模式为默认模式,那么每句S ...