HDU2795线段树
来源:互联网 发布:英译汉软件下载 编辑:程序博客网 时间:2024/05/01 02:32
在学校的入口处有一个巨大的矩形广告牌,高为h,宽为w。所有种类的广告都可以贴,比如ACM的广告啊,还有餐厅新出了哪些好吃的,等等。。
在9月1号这天,广告牌是空的,之后广告会被一条一条的依次贴上去。
每张广告都是高度为1宽度为wi的细长的矩形纸条。
贴广告的人总是会优先选择最上面的位置来帖,而且在所有最上面的可能位置中,他会选择最左面的位置,而且不能把已经贴好的广告盖住。
如果没有合适的位置了,那么这张广告就不会被贴了。
现在已知广告牌的尺寸和每张广告的尺寸,求每张广告被贴在的行编号。
Input
多组样例,不超过40个。
对每组样例,第一行包含3个整数h,w,n(1 <= h,w <= 10^9; 1 <= n <= 200,000) -广告牌的尺寸和广告的个数。
下面n行每行一个整数 wi (1 <= wi <= 10^9) - 第i张广告的宽度.
Output
对每张广告,输出它被贴在的行编号(是1到h之间的数),顶部是第一行。如果某广告不能被贴上,则输出-1。
Sample Input
3 5 5
2
4
3
3
3
Sample Output
1
2
1
3
-1
/************************************/
抱歉看错题了,这段话无用。代码是正确的。有时间重新写一遍
直接线段树会超时超内存。需要先进行离散化处理。
什么是离散化?大概是把较大的数映射为较小的数。比如区间【5,10】【20,30】如果不进行离散化处理,开数组至少为30个int字节【1,30】中其他的空间被浪费了。进行离散化处理后,每个数字根据与其他数字相对大小为标准进行映射。5->1,10->2,20->3,30->4。只需要开4个int大小的空间就够了。
然而这道题有些特殊。它的要求是”覆盖“。简单的离散后可能出现错误。
比如。【1,4】 【5,7】 【6,7】
线段树维护区间
/*****************************************/
#include<iostream>#include<stdio.h>#include<algorithm>#include<cmath>#include<set>#include<vector>#include<map>#include<string>#include<stdlib.h>#include<limits.h>using namespace std;/******************************************************/#define LL long long int#define mem(a,b) memset(a,b,sizeof(a))#define mid (l+r)/2#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1#define L rt<<1#define R rt<<1|1#define N 200000+10#define pow(a) a*a#define INF 0x3f3f3f3f#define max(a,b) (a>b?a:b)#define min(a,b) (a<b?a:b)#define lowbit(i) (i&-i)/*********************************************************//*3 5 524333*/int h, w, n;int MAX[N << 2];int mark[N << 2];int flag = 0;int pos;void pushup(int rt){ MAX[rt] = max(MAX[L], MAX[R]);}void update(int a, int l, int r, int rt){ if (l == r){ MAX[rt] -= a; pos = l; return; } if (MAX[L] >= a)update(a, lson); else if (MAX[R] >= a)update(a, rson); else return; pushup(rt);}int main(){ while (~scanf("%d%d%d", &h, &w, &n)){ if (h > n) h = n; for (int i = 1; i <= 4 * h; i++)MAX[i] = w; while (n--){ int a; scanf("%d", &a); if (MAX[1] < a)printf("-1\n"); else{ update(a, 1, h, 1); printf("%d\n", pos); } } }}
- 线段树 hdu2795
- HDU2795(Billboard)线段树
- hdu2795线段树
- HDU2795 Billboard(线段树)
- hdu2795 Billboard 线段树
- hdu2795线段树
- HDU2795 Billboard(线段树)
- hdu2795 线段树
- hdu2795 线段树
- hdu2795 Billboard(线段树)
- HDU2795 Billboard 线段树
- HDU2795 Billboard 线段树
- hdu2795 Billboard 线段树
- HDU2795-Billboard 【线段树】
- HDU2795 线段树
- HDU2795 Billboard(线段树)
- HDU2795 Billboard 线段树
- hdu2795 线段树
- 系统设计的三要素
- [矩阵 点分治] BZOJ 4623 Styx
- Introduction_to_Algorithms_chap4
- 2017年3月17日,周结(四),学生信息管理系统
- 阻止冒泡的兼容性写法,以及阻止浏览器默认事件
- HDU2795线段树
- BZOJ 1188 [SG定理][博弈论]
- Introduction_to_Algorithms_chap5
- 洛谷 P1017 进制转换
- javaweb学习总结(七)——HttpServletResponse对象(一)
- 如何获取一个APK的包名
- [编程题]【中级】单词倒排
- 实现自动构建编译javaweb项目并发布到N台服务器
- Introduction_to_algorithms_6