hdu2795 线段树】的更多相关文章

Billboard Time Limit: 20000/8000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 17122    Accepted Submission(s): 7233 Problem Description At the entrance to the university, there is a huge rectangular billboard of…
//Accepted 6396 KB 3046 ms //线段树 //由于n只有200000,我们可以知道,当h>200000时,大于200000的部分是没有用的 //所以我们可以用n来创建线段树 //我的思路是: //维护一个已用区段的线段树 //用len表示当前已用的区段 //当需要贴一个宽度为wi的announcement时,先判断已用的区段能不能放下,如果不能这考虑len+1 (len+1<n && len+1<h) //如果上述两种情况都不能放下,这放不下,ou…
//=========================================== //segment tree //final version //by kevin_samuel(fenice) //以h离散化构建线段树 #include <iostream> #include <cstdio> #include <cmath> using namespace std; #define MAXN 201050 #define INF 0x3fffffff in…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2795 题意:有一个 h * w 的板子,要在上面贴 n 条 1 * x 的广告,在贴第 i 条广告时要尽量将其靠上贴,并输出其最上能贴在哪个位置: 思路:可以将每行剩余空间大小存储到一个数组中,那么对于当前 1 * x 的广告,只需找到所有剩余空间大于的 x 的行中位置最小的即可: 不过本题数据量为 2e5,直接暴力因该会 tle.可以用个线段树维护一下区间最大值,然后查询时对线段树二分即可: 代码…
http://acm.hdu.edu.cn/showproblem.php?pid=2795 #include<iostream> using namespace std; ; int h,w,x; struct node { int r; int l; int res; }; node tree[n*]; void build(int root,int l,int r) { tree[root].l=l; tree[root].r=r; tree[root].res=w; if(l==r)…
hdu2795 Billboard 题意:h*w的木板,放进一些1*L的物品,求每次放空间能容纳且最上边的位子 思路:每次找到最大值的位子,然后减去L 线段树功能:query:区间求最大值的位子(直接把update的操作在query里做了) 题意:有一块长方形h*w的广告板,往上面贴广告,然后给n个1*wi的广告,要求把广告贴上去,如果前面的行可以贴,就要贴前面的并且要靠左贴,前面的贴不下就贴在下面, 广告的高度是wi,如果能贴在上面输出最小的高度,如果不能就输出-1. 解题思路:如果以行数为区…
Billboard Time Limit: 20000/8000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 10594    Accepted Submission(s): 4686 Problem Description At the entrance to the university, there is a huge rectangular billboard of s…
大意:给一个h*w的格子,然后给出多个1*w的板子往格子里面填,如果有空间尽量往上一行填满,输出行数,无法填补,则输出-1: 可以使用线段树转化问题,将每一排的格子数目放到每一个叶子节点上,然后每有一块板子,进行query查询靠左子树的第一个大于板子的叶子,进行update操作更新叶子.每个节点附权值max叶子节点即可.令一个小坑是h和w的范围是1e9,数组太大.试想如果格子高度h > 板子的个数n,那么我们只需要压缩格子到n个高度即可.所有给叶子节点的存储空间就能压缩成n的范围即1e6. #i…
题意: 有一个H*W的广告牌,当插入一个广告时(1*Wi),问最靠前的插入方式是什么 新生赛有个类似的题目,可惜当时居然没水过去. 果断用线段树做 以H为线段 建树,存[l,r]中最大的宽度,因为区间最大值满足区间和性质. 所以线段树几个要素如下: 线段:H 区间和性质:最大值 代码: #include <cstdio> #include <cstdlib> #include <cmath> #include <cstring> #include <c…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2795 hhanger大神的题目,水题都得有点思维. 题意:h*w的木板,放进一些1*L的物品,求每次放空间能容纳且最上边的位子 思路:每次找到最大值的位子,然后减去L 线段树功能:query:区间求最大值的位子(直接把update的操作在query里做了) 技巧挺好,一开始自己思路建个超大二维数组,显然内存不够. 然后.  线段树的话其实就是深搜,if(l==r) 返回的肯定是最左边的结点,哈~ 判…