正题


题目大意

给出每个人前或后面比他高的人数,然后求一个序列,人们高度字典序最小的序列。


解题思路

我们将高度从小到大插入,然后对于每个人至少保留一些比他高的人的空位,然后用权值线段树O(log2n)O(log^2 n)O(log2n)计算第k个空位的位置插入。
当然也有二分加树状数组,详见
https://blog.csdn.net/Mr_wuyongcong/article/details/81988835


code

#include<cstdio>
#include<algorithm>
#define N 100010
using namespace std;
struct node{int h,num;
}a[N];
struct treenode{int l,r,w;
}tree[N*8];
int n,put[N];
bool cmp(node x,node y)
{return x.h<y.h;}
int read(){int x=0,flag=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')flag=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*flag;
}
void write(int x)
{if(x>9) write(x/10);putchar(x%10+48);return;
}
void build(int k,int l,int r)//建树
{tree[k].l=l;tree[k].r=r;tree[k].w=r-l+1;if(l==r) return;int mid=(l+r)/2;build(k*2,l,mid);build(k*2+1,mid+1,r);
}
void inster(int k,int num,int i)//第num个空位
{tree[k].w--;if(tree[k].l==tree[k].r){put[tree[k].l]=i;return;}if(tree[k*2].w>=num) inster(k*2,num,i);else inster(k*2+1,num-tree[k*2].w,i);
}
int main()
{n=read();for(int i=1;i<=n;i++)a[i].h=read(),a[i].num=read();sort(a+1,a+1+n,cmp);for(int i=1;i<=n;i++)if(a[i].num>=n-i+1){printf("impossible");return 0;}build(1,1,n);for(int i=1;i<=n;i++){int k=min(a[i].num+1,n-a[i].num-i+1);//计算最小字典序的位置inster(1,k,a[i].h);}for(int i=1;i<=n;i++)write(put[i]),putchar(' ');
}

nssl1209-奇怪的队列【贪心,权值线段树】相关推荐

  1. 【HDU6701】Make Rounddog Happy【权值线段树+双向单调队列】

    题意:给你一个序列,求满足要求的子序列个数,其中要求为: 1.子序列的max-子序列长度len<=k 2.子序列中不出现重复的数字 题解:首先看到子序列max,很容易想到枚举最大值然后分治,这个 ...

  2. 【BZOJ-28921171】强袭作战大sz的游戏 权值线段树+单调队列+标记永久化+DP...

    2892: 强袭作战 Time Limit: 50 Sec  Memory Limit: 512 MB Submit: 45  Solved: 30 [Submit][Status][Discuss] ...

  3. Governing sand(权值线段树/主席树)

    链接:https://ac.nowcoder.com/acm/contest/887/C 来源:牛客网 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 65536K,其他语言13107 ...

  4. P3960-列队【权值线段树】

    正题 题目链接:https://www.luogu.com.cn/problem/P3960 题目大意 n∗mn*mn∗m的队列,起初站在第(i,j)(i,j)(i,j)位置的人编号是(i−1)∗n+ ...

  5. [BZOJ5139][Usaco2017 Dec]Greedy Gift Takers 权值线段树

    Description Farmer John's nemesis, Farmer Nhoj, has NN cows (1≤N≤10^5), conveniently numbered 1-N. T ...

  6. 【bzoj2770】YY的Treap 权值线段树

    题目描述 志向远大的YY小朋友在学完快速排序之后决定学习平衡树,左思右想再加上SY的教唆,YY决定学习Treap.友爱教教父SY如砍瓜切菜般教会了YY小朋友Treap(一种平衡树,通过对每个节点随机分 ...

  7. 树套树 ----- P1975 [国家集训队]排队(树状数组套权值线段树求动态逆序对)

    解题思路: 首先我们知道交换两个数a[l]和a[r]a[l]和a[r]a[l]和a[r]影响到的区间是[l+1,r−1][l+1,r-1][l+1,r−1] 对于a[l]a[l]a[l],我们要减去[ ...

  8. 树套树 ---- 树状数组套权值线段树模板题 P2617 Dynamic Rankings 动态第K大

    题目链接 题目大意: 给你一个数组aaa,aaa有两个操作 询问aaa中[l,r][l,r][l,r]区间里面第kkk小的数是哪个? 修改axa_xax​为yyy 解题思路: 首先我们知道权值线段树是 ...

  9. codevs1688 求逆序对(权值线段树)

    1688 求逆序对  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果 题目描述 Description 给定一个序列a1,a2,-,an,如 ...

最新文章

  1. 如何解决android 通知栏不显示的问题
  2. 树莓派 更新 时间 时区
  3. pomelo php,Nginx 502 Bad Gateway 自动重启shell脚本
  4. SpringBoot_web开发-SpringMVC自动配置原理
  5. 20165211 2017-2018-2 《Java程序设计》第4周学习总结
  6. 16岁应该遵循什么_成人学习一般遵循的规律
  7. Best Coder Lotus and Characters
  8. Xen虚拟化平台安装及实时迁移
  9. Aspectj快速上手代码示例之Before,After,Around
  10. 【ArcGIS操作】2 高级编辑篇
  11. Java后端编程技术微信群和QQ群
  12. MPEG LA提供一站式ATSC 3.0许可证
  13. matlab自带的mri数据集,探查三维 MRI 数据集的切片
  14. 除了同性交友平台 GitHub,程序员们业余时间还可以去哪儿?
  15. 【转载】Oracle 查看执行计划
  16. CSS实现鼠标悬停缩放
  17. 状态机----C语言实现
  18. TypeScript下载安装
  19. 域名(DNS)原理及解析过程详解
  20. Windows 文件系统过滤驱动开发教程 (第二版)

热门文章

  1. 山东大学计算机非全上课,山东大学非全日制研究生上课方式
  2. 前台提交数据到php mysql,建立一个基础的MySQL数据库,使用PHP来抓取和处理数据,并抛出给前台...
  3. python中log1p用法_python中logging模块的基本用法
  4. [JavaWeb-HTML]HTML标签(大部分常用标签介绍)
  5. [JavaWeb-HTML]HTML标签_链接标签
  6. [JavaWeb-MySQL]DCL管理用户,授权
  7. [Java基础]哈希值
  8. C++ 在派生类中使用using声明改变基类成员的可访问性
  9. LeetCode 143 重排链表-中等
  10. 哈希表-拉链法及应用举例