数字的字典序,,有点迷,网上看题解也没有明说,总之越大的数字放在后面就行了

利用二分找到前k个空位即可

/*
每个人有一个独特的高度,第i个人高hi,前面有ki个人比他高或后面有ki个人比他高
请求出可能队列, 升序排列身高,每个人可选的位置是第k+1个空位或者第n-i-k个空位,
如果n-i-k<=0,那么就是impossible
结果要按照字典序输出,所以如果有两个可选位置可以插入时,需要判断从前往后插还是从后往前插好。
插入时按照二分找到树状数组中第k+1个空位
离线离散化,树状数组维护空位
复杂度O(nlognlogn)
*/
#include<bits/stdc++.h>
#define maxn 100005 using namespace std; struct node{int h,k;}p[maxn];
int cmp(node a,node b){return a.h<b.h;}
int bit[maxn],ans[maxn],n;
void add(int x,int num){
for(int i=x;i<=n;i+=i&-i)
bit[i]+=num;
}
int query(int x){
int res=;
for(int i=x;i;i-=i&-i)
res+=bit[i];
return res;
} int main(){
int t,flag;
scanf("%d",&t);
for(int tt=;tt<=t;tt++){
scanf("%d",&n);
memset(bit,,sizeof bit);
flag=;
for(int i=;i<=n;i++) add(i,);
for(int i=;i<=n;i++)scanf("%d%d",&p[i].h,&p[i].k);
sort(p+,p++n,cmp);
for(int i=;i<=n;i++){
int pos1=p[i].k+,pos2=n-i-p[i].k+;
if(pos2<=){
flag=;
break;
}
int pos=min(pos1,pos2);//为了字典序最小找一个最小的位置
int l=,r=n,mid,anss;
while(l<=r){
mid=l+r>>;
if(query(mid)<pos)
l=mid+;
else anss=mid,r=mid-;
}
add(anss,-);
ans[anss]=p[i].h;
}
if(flag)printf("Case #%d: impossible\n",tt);
else {
printf("Case #%d:",tt);
for(int i=;i<=n;i++) printf(" %d",ans[i]);
puts("");
}
}
return ;
}

hdu5493 树状数组+二分的更多相关文章

  1. POJ 2828 Buy Tickets (线段树 or 树状数组+二分)

    题目链接:http://poj.org/problem?id=2828 题意就是给你n个人,然后每个人按顺序插队,问你最终的顺序是怎么样的. 反过来做就很容易了,从最后一个人开始推,最后一个人位置很容 ...

  2. TZOJ 4602 高桥和低桥(二分或树状数组+二分)

    描述 有个脑筋急转弯是这样的:有距离很近的一高一低两座桥,两次洪水之后高桥被淹了两次,低桥却只被淹了一次,为什么?答案是:因为低桥太低了,第一次洪水退去之后水位依然在低桥之上,所以不算“淹了两次”.举 ...

  3. POJ 2182 Lost Cows 【树状数组+二分】

    题目链接:http://poj.org/problem?id=2182 Lost Cows Time Limit: 1000MS   Memory Limit: 65536K Total Submis ...

  4. 树状数组+二分||线段树 HDOJ 5493 Queue

    题目传送门 题意:已知每个人的独一无二的身高以及排在他前面或者后面比他高的人数,问身高字典序最小的排法 分析:首先对身高从矮到高排序,那么可以知道每个人有多少人的身高比他高,那么取较小值(k[i], ...

  5. P2161 [SHOI2009]会场预约[线段树/树状数组+二分/STL]

    题目描述 PP大厦有一间空的礼堂,可以为企业或者单位提供会议场地.这些会议中的大多数都需要连续几天的时间(个别的可能只需要一天),不过场地只有一个,所以不同的会议的时间申请不能够冲突.也就是说,前一个 ...

  6. The Stream of Corning 2( 权值线段树/(树状数组+二分) )

    题意: 有两种操作:1.在[l,r]上插入一条值为val的线段 2.问p位置上值第k小的线段的值(是否存在) 特别的,询问的时候l和p合起来是一个递增序列 1<=l,r<=1e9:1< ...

  7. 牛客多校第3场 J 思维+树状数组+二分

    牛客多校第3场 J 思维+树状数组+二分 传送门:https://ac.nowcoder.com/acm/contest/883/J 题意: 给你q个询问,和一个队列容量f 询问有两种操作: 0.访问 ...

  8. UVA 11610 Reverse Prime (数论+树状数组+二分,难题)

    参考链接http://blog.csdn.net/acm_cxlove/article/details/8264290http://blog.csdn.net/w00w12l/article/deta ...

  9. HDU 2852 KiKi's K-Number 树状数组 + 二分

    一共最多才100000个数,并且数值范围0~100000. 树状数组 C[i] 记录数值为 i 的数有多少个. 删除时如果Query( a ) - Query( a - 1 ) == 0 则该数不存在 ...

随机推荐

  1. 搭建nginx反向代理用做内网域名转发

    先上一个我的正常使用的配置 location / { proxy_pass http://192.168.1.84:80; proxy_redirect off; proxy_set_header H ...

  2. python---session(tornado中使用)缓存

    session.py插件 # coding:utf8 # __author: Administrator # date: // # /usr/bin/env python import config ...

  3. UVALive - 7147 (数学)

    题目链接 题意 n只队伍,两两之间会进行比赛,赢平输都有相应得分,所有比赛结束后,前m名可以晋级.问最大的不能晋级分数为多少,以及最小的能晋级的分数. 分析 智商题...按照要求来贪心1.没有晋级的队 ...

  4. 浅谈分词算法(5)基于字的分词方法(bi-LSTM)

    目录 前言 目录 循环神经网络 基于LSTM的分词 Embedding 数据预处理 模型 如何添加用户词典 前言 很早便规划的浅谈分词算法,总共分为了五个部分,想聊聊自己在各种场景中使用到的分词方法做 ...

  5. 个股和股票池的beta系数的估算

    个股的beta系数的估算 代码 def test_gg_beta(symbol='000895.sz', start='2018-01-01', plot_price=True, align_to=' ...

  6. springboot(六)SpringBoot问题汇总

    SpringBoot2.0整合Mybatis,取datetime数据类型字段出来时,发现少了8小时. 过程:mysql中注册时间查询出来结果是正确的,只是java程序运行出来后显示少了8小时.经前辈指 ...

  7. Python官方操作Excel文档

    xlwt 1.3.0 Downloads ↓ Library to create spreadsheet files compatible with MS Excel 97/2000/XP/2003 ...

  8. luogu 2294 狡猾的商人 带权并查集

    此题做法多啊 带权并查集,区间dp,前缀和,差分约束 1.自己写的前缀和, 11 #include<bits/stdc++.h> #define rep(i,x,y) for(regist ...

  9. Elaticsearch 集群

    elasticsearch开源的搜索引擎:  ElasticSearch 个基于Lucene的搜索服务器:可以使用多节点的备份:集群设置: (类似是个数据库型.有索引有什么的).(lucene apa ...

  10. 卷积神经网络(CNN)学习笔记1:基础入门

    卷积神经网络(CNN)学习笔记1:基础入门 Posted on 2016-03-01   |   In Machine Learning  |   9 Comments  |   14935  Vie ...