HDU 5493 Queue(二分+树状数组)
来源:互联网 发布:精灵虚拟光驱 mac 编辑:程序博客网 时间:2024/05/23 23:19
思路:显然的要字典序最小那么就离线先把身高排个序然后一个个插,对于某一个人来说,他的位置有可能在p[i].h+1,或者n-i-p[i].h+1这两个位置,然后二分前面有多少个位置来插入就可以了
#include<bits/stdc++.h>using namespace std;const int maxn = 100000+7;int c[maxn],ans[maxn];int lowbit(int x){return x&(-x);}void update(int i,int v){while(i<=maxn){c[i]+=v;i+=lowbit(i);}}int query(int i){int ans = 0;while(i){ ans+=c[i];i-=lowbit(i);}return ans;}struct P{int h,pos;}p[maxn];bool cmp(P a,P b){return a.h<b.h;}int main(){int T,cas=1;scanf("%d",&T);while(T--){memset(c,0,sizeof(c)); int n;scanf("%d",&n);for(int i = 1;i<=n;i++) scanf("%d%d",&p[i].h,&p[i].pos);sort(p+1,p+1+n,cmp);int flag = 0; for(int i = 1;i<=n;i++){ int k = min(p[i].pos,n-i-p[i].pos);if(k<0){flag=1;break;}k++;int l = 1,r=n;int re = 0;while(l<=r){int mid = (l+r)>>1;if(mid-query(mid)>=k)r=mid-1,re =mid;else l = mid+1;}update(re,1);ans[re]=p[i].h;}printf("Case #%d: ",cas++);if(flag)printf("impossible\n");if(!flag)for(int i = 1;i<=n;i++){if(i==n) printf("%d\n",ans[i]);elseprintf("%d ",ans[i]);}}}
0 0
- HDU 5493 Queue(二分+树状数组)
- HDU 5493 Queue(二分+树状数组)
- HDU 5493 Queue(树状数组+二分)
- Hdu 5493 Queue【伸展树/二分+树状数组】
- HDU 5493 Queue (树状数组+二分)2015 ICPC 合肥网赛
- HDU 5493(树状数组+二分)
- hdu 5493 Queue 2015合肥网络赛 树状数组 二分 离散化 贪心
- HDU 4339 Query(树状数组+二分)
- hdu(4339)树状数组+二分查找
- hdu 2852(树状数组+二分)
- HDU-4339 Query(树状数组+二分)
- HDU 4311 树状数组+二分
- HDU 2852 树状数组+二分
- hdu 5592 树状数组+二分
- hdu 3436 Queue-jumpers 树状数组
- hdu 5493 (树状数组)
- hdu 2852 KiKi's K-Number(树状数组+二分)
- HDU 4302 Holedox Eating (二分+树状数组维护)
- Android开发之设置APP全局字体
- 百度图片、百度文库, 维基百科英文版
- TQ210 —— s5pv210 start.S分析
- [4] DevOps 自动化运维工具Chef----在Ubuntu上安装最新的Chef Client 12.13.37 并和Chef server关联起来
- 网页乱码分析
- HDU 5493 Queue(二分+树状数组)
- 几个名词解释:大数据、Hadoop、云计算、机器学习、NLP、数据挖掘
- leetcode-005 Longest Palindromic Substring
- linux下curses库介绍
- 通过异或运算交换两个整数的值
- .net平台个人理解
- Python从入门到放弃(一):概论
- Python从入门到放弃(二):核心数据类型
- Python从入门到放弃(三):基本语句和语法