hdu2795解题报告
2015-09-23 10:58
211 查看
题目大意:有一个h*w的告示牌,再给你n个1*wi的告示,这些告示优先贴上边,其次是靠左。问每个告示所在在高度,如果不能放,则输出-1。
解题思路:线段树,以高度作为区间,每个结点存放此区间最大的容量即宽度,优先访问左子树。
解题思路:线段树,以高度作为区间,每个结点存放此区间最大的容量即宽度,优先访问左子树。
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> using namespace std; const int maxn=200000; int h,w,n,sumv[maxn<<3],ret; void build(int o,int L,int R) { int M=L+(R-L)/2; sumv[o]=w; if(L==R) return ; else { build(o*2,L,M); build(o*2+1,M+1,R); } } void query(int o,int L,int R,int len) { int M=L+(R-L)/2; if(L==R) { sumv[o]-=len; ret=L; return ; } else { if(len<=sumv[o*2]) query(o*2,L,M,len); else if(len<=sumv[o*2+1]) query(o*2+1,M+1,R,len); sumv[o]=max(sumv[o*2],sumv[o*2+1]); return; } } int main() { while(scanf("%d%d%d",&h,&w,&n)!=EOF) { int tmp; int h1=min(n,h); build(1,1,h1); while(n--) { scanf("%d",&tmp); if(sumv[1]>=tmp) { query(1,1,h1,tmp); printf("%d\n",ret); } else printf("-1\n"); } } return 0; }
相关文章推荐
- 查找子串
- 关于我的兼职创业历程
- Caused by: org.springframework.beans.NotWritablePropertyException
- 2 Eclipse的衍生版本
- Android中AsyncTask使用
- undefined reference to symbol xxxxx和undefined symbol:xxxx错误的原因分析以及解决方法
- UILabel小结
- Tomcat安全配置
- Codeforces,Kefa and Dishes,状态压缩DP
- MyEclipse Web 项目的图标和右键New菜单
- java 导出写入xls 代码记录
- Git配置过程中出现的问题,以及解决方案
- bzoj-2278 Garbage
- 获得Oracke中刚插入的ID ---> GetInsertedID()
- tabBaritem的图片偏移
- vim使用
- 神奇的图像处理算法
- win系统下破解电脑密码
- LNMP的并发考虑、资源分配(php-fpm进程管理器的核心配置)
- 疑惑·android全屏显示相关