按身高排序,每个人前面最高的人数有上限,如果超出上限说明impossible,

每次考虑最小的人,把他放在在当前的从左往右第k+1个空位

因为要求字典序最小,所以每次k和(上限-k)取min值。

没有修改操作,只有删除,可用线段树维护空位数量s,每次类似名次树判断一下第k个空位在哪颗子树上(原来这叫划分树

到达叶子返回位置编号并减少空位数量,push_up的时候维护一下空位数量。

#include<bits/stdc++.h>
using namespace std; const int maxn = 1e5+;
struct Nd
{
int h,k;
void IN(){ scanf("%d%d",&h,&k); }
bool operator < (const Nd& rh) const{
return h < rh.h;
}
}nd[maxn];
int N; bool chk()
{
sort(nd,nd+N);
for(int i = ,n = N-; i <= n; i++){
if(nd[i].k > n-i) return false;
nd[i].k = min(nd[i].k,n-i-nd[i].k);
}
return true;
} #define lo (o<<1)
#define ro (o<<1|1)
#define lsn L, M, lo
#define rsn M+1,R, ro
#define mid int M = (L+R)>>1;
#define para int L = 0, int R = N-1,int o = 1 int s[maxn<<];
void build(para)
{
s[o] = R-L+;
if(L==R) return;
mid
build(lsn);
build(rsn);
} int qk;
int qud(para)
{
if(L==R){ s[o]--; return L; }
mid
int re = ;
if(s[lo]>=qk) re = qud(lsn);
else { qk -= s[lo];re = qud(rsn); }
s[o] = s[lo] + s[ro];
return re;
} int ans[maxn]; //#define LOCAL
int main()
{
#ifdef LOCAL
freopen("in.txt","r",stdin);
#endif
int T, ks = ; scanf("%d",&T);
while(T--){
scanf("%d",&N);
for(int i = ; i < N; i++) nd[i].IN();
printf("Case #%d:",++ks);
if(!chk()) { puts(" impossible"); continue; }
build();
for(int i = ; i < N; i++){
qk = nd[i].k+;
ans[qud()] = nd[i].h;
}
for(int i = ; i < N; i++){
printf(" %d",ans[i]);
}
puts("");
}
return ;
}

HDU - 5493 Queue 2015 ACM/ICPC Asia Regional Hefei Online(线段树)的更多相关文章

  1. 【线段树】HDU 5493 Queue (2015 ACM/ICPC Asia Regional Hefei Online)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5493 题目大意: N个人,每个人有一个唯一的高度h,还有一个排名r,表示它前面或后面比它高的人的个数 ...

  2. (并查集)Travel -- hdu -- 5441(2015 ACM/ICPC Asia Regional Changchun Online )

    http://acm.hdu.edu.cn/showproblem.php?pid=5441 Travel Time Limit: 1500/1000 MS (Java/Others)    Memo ...

  3. (二叉树)Elven Postman -- HDU -- 54444(2015 ACM/ICPC Asia Regional Changchun Online)

    http://acm.hdu.edu.cn/showproblem.php?pid=5444 Elven Postman Time Limit: 1500/1000 MS (Java/Others)  ...

  4. 【二分】【最长上升子序列】HDU 5489 Removed Interval (2015 ACM/ICPC Asia Regional Hefei Online)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5489 题目大意: 一个N(N<=100000)个数的序列,要从中去掉相邻的L个数(去掉整个区间 ...

  5. 【动态规划】HDU 5492 Find a path (2015 ACM/ICPC Asia Regional Hefei Online)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5492 题目大意: 一个N*M的矩阵,一个人从(1,1)走到(N,M),每次只能向下或向右走.求(N+ ...

  6. 【贪心】【模拟】HDU 5491 The Next (2015 ACM/ICPC Asia Regional Hefei Online)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5491 题目大意: 一个数D(0<=D<231),求比D大的第一个满足:二进制下1个个数在 ...

  7. (线段树 区间查询)The Water Problem -- hdu -- 5443 (2015 ACM/ICPC Asia Regional Changchun Online)

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=5443 The Water Problem Time Limit: 1500/1000 MS (Java/ ...

  8. (字符串处理)Fang Fang -- hdu -- 5455 (2015 ACM/ICPC Asia Regional Shenyang Online)

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=5455 Fang Fang Time Limit: 1500/1000 MS (Java/Others)  ...

  9. hdu 5492 Find a path(dp+少量数学)2015 ACM/ICPC Asia Regional Hefei Online

    题意: 给出一个n*m的地图,要求从左上角(0, 0)走到右下角(n-1, m-1). 地图中每个格子中有一个值.然后根据这些值求出一个最小值. 这个最小值要这么求—— 这是我们从起点走到终点的路径, ...

随机推荐

  1. 写守护进程时碰到open函数的参数,没记住

    今天写一个最简单的守护进程, 要成为一个守护进程,其实很简单了.主要步骤就4步: 1,创建进程. 2,父进程退出. 3,成为会话的头领进程. 4,将工作目录改成根目录,并把标准输入输出重定向到空设备. ...

  2. VMware S/4 HANA OP 1511虚拟机下载,64G内存限制解决方案

    http://www.itpub.net/thread-2057212-1-1.html S4 HANA OP 1511 Scale Out

  3. ADT-Bundle--Android开发环境快速搭建

    http://blog.csdn.net/aizquan/article/details/8974750

  4. Infoapth 使用拼写 并加载web part 在Infopath的页面上

    <g_vml_:shape style="POSITION: absolute; WIDTH: 568px; HEIGHT: 1312px; TOP: 0px; LEFT: 0px&q ...

  5. zoj 3640 Help Me Escape (概率dp 递归求期望)

    题目链接 Help Me Escape Time Limit: 2 Seconds      Memory Limit: 32768 KB Background     If thou doest w ...

  6. python列表逆序三种方法

    栗子: # 题目:将一个数组逆序输出. # # 程序分析:用第一个与最后一个交换. import random list =[random.randint(0,100) for _ in range( ...

  7. jsf+ejb

    jsf+ejb 示例 http://docs.jboss.org/jbossas/docs/Installation_And_Getting_Started_Guide/5/html/Sample_J ...

  8. Maven入门 项目的生命周期&pom.xml配置&仓库

  9. Python模块之re

    re模块 准备: flags有很多可选值: re.I(IGNORECASE)忽略大小写,括号内是完整的写法 re.M(MULTILINE)多行模式,改变^和$的行为 re.S(DOTALL)点可以匹配 ...

  10. 线程池(2)Executors.newFixedThreadPool

    例子: ExecutorService es = Executors.newFixedThreadPool(5); try { for (int i = 0; i < 20; i++) { Ru ...