nssl1209-奇怪的队列【贪心,权值线段树】
正题
题目大意
给出每个人前或后面比他高的人数,然后求一个序列,人们高度字典序最小的序列。
解题思路
我们将高度从小到大插入,然后对于每个人至少保留一些比他高的人的空位,然后用权值线段树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-奇怪的队列【贪心,权值线段树】相关推荐
- 【HDU6701】Make Rounddog Happy【权值线段树+双向单调队列】
题意:给你一个序列,求满足要求的子序列个数,其中要求为: 1.子序列的max-子序列长度len<=k 2.子序列中不出现重复的数字 题解:首先看到子序列max,很容易想到枚举最大值然后分治,这个 ...
- 【BZOJ-28921171】强袭作战大sz的游戏 权值线段树+单调队列+标记永久化+DP...
2892: 强袭作战 Time Limit: 50 Sec Memory Limit: 512 MB Submit: 45 Solved: 30 [Submit][Status][Discuss] ...
- Governing sand(权值线段树/主席树)
链接:https://ac.nowcoder.com/acm/contest/887/C 来源:牛客网 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 65536K,其他语言13107 ...
- P3960-列队【权值线段树】
正题 题目链接:https://www.luogu.com.cn/problem/P3960 题目大意 n∗mn*mn∗m的队列,起初站在第(i,j)(i,j)(i,j)位置的人编号是(i−1)∗n+ ...
- [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 ...
- 【bzoj2770】YY的Treap 权值线段树
题目描述 志向远大的YY小朋友在学完快速排序之后决定学习平衡树,左思右想再加上SY的教唆,YY决定学习Treap.友爱教教父SY如砍瓜切菜般教会了YY小朋友Treap(一种平衡树,通过对每个节点随机分 ...
- 树套树 ----- 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],我们要减去[ ...
- 树套树 ---- 树状数组套权值线段树模板题 P2617 Dynamic Rankings 动态第K大
题目链接 题目大意: 给你一个数组aaa,aaa有两个操作 询问aaa中[l,r][l,r][l,r]区间里面第kkk小的数是哪个? 修改axa_xax为yyy 解题思路: 首先我们知道权值线段树是 ...
- codevs1688 求逆序对(权值线段树)
1688 求逆序对 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 给定一个序列a1,a2,-,an,如 ...
最新文章
- 如何解决android 通知栏不显示的问题
- 树莓派 更新 时间 时区
- pomelo php,Nginx 502 Bad Gateway 自动重启shell脚本
- SpringBoot_web开发-SpringMVC自动配置原理
- 20165211 2017-2018-2 《Java程序设计》第4周学习总结
- 16岁应该遵循什么_成人学习一般遵循的规律
- Best Coder Lotus and Characters
- Xen虚拟化平台安装及实时迁移
- Aspectj快速上手代码示例之Before,After,Around
- 【ArcGIS操作】2 高级编辑篇
- Java后端编程技术微信群和QQ群
- MPEG LA提供一站式ATSC 3.0许可证
- matlab自带的mri数据集,探查三维 MRI 数据集的切片
- 除了同性交友平台 GitHub,程序员们业余时间还可以去哪儿?
- 【转载】Oracle 查看执行计划
- CSS实现鼠标悬停缩放
- 状态机----C语言实现
- TypeScript下载安装
- 域名(DNS)原理及解析过程详解
- Windows 文件系统过滤驱动开发教程 (第二版)
热门文章
- 山东大学计算机非全上课,山东大学非全日制研究生上课方式
- 前台提交数据到php mysql,建立一个基础的MySQL数据库,使用PHP来抓取和处理数据,并抛出给前台...
- python中log1p用法_python中logging模块的基本用法
- [JavaWeb-HTML]HTML标签(大部分常用标签介绍)
- [JavaWeb-HTML]HTML标签_链接标签
- [JavaWeb-MySQL]DCL管理用户,授权
- [Java基础]哈希值
- C++ 在派生类中使用using声明改变基类成员的可访问性
- LeetCode 143 重排链表-中等
- 哈希表-拉链法及应用举例