HDU 2795 Billboard(线段树)
来源:互联网 发布:考研对未来的意义 知乎 编辑:程序博客网 时间:2024/04/29 12:03
题目链接:Click here
题意:有一块h*w的墙,有n个宣传单 每个的大小为 1*wi 每次贴都从最左最上能贴的位置开始。求每一宣传单被贴在哪一行。
思路:将墙从1~h划分成h个区间,建立线段树,每个区间的信息为所能贴的最大宽度len[i],每次查找,找到后输出,更新区间信息。
#include <iostream>#include <cstring>#include <cstdio>#include <queue>using namespace std;int len[800005], w;void build(int left, int right, int f){ int mid; mid = (left + right) / 2; if(left == right) len[f] = w; else { build(left, mid, f * 2); build(mid + 1, right, f * 2 + 1); len[f] = w; }}int que(int qw,int left, int right, int f){ int place, mid; mid = (left + right) / 2; if(left == right) { len[f] -= qw; return left; } if(len[f * 2] >= qw) place = que(qw, left, mid, f * 2); else place = que(qw, mid + 1, right, f * 2 + 1); if(len[f*2] > len[f*2+1]) len[f] = len[f*2]; else len[f] = len[f*2+1]; return place;}int main(){ int s, h, n; while(scanf("%d%d%d", &h, &w, &n) != EOF) { if(h > n) h = n; build(1, h, 1); while(n--) { scanf("%d", &s); if(s > len[1]) printf("-1\n"); else printf("%d\n", que(s,1,h,1)); } } return 0;}
0 0
- hdu 2795 Billboard(线段树)
- hdu - 2795 - Billboard(线段树)
- hdu 2795 Billboard(线段树)
- [ACM] hdu 2795 Billboard (线段树)
- HDU 2795 Billboard(线段树)
- hdu 2795 Billboard(线段树版)
- hdu 2795 Billboard(线段树版)
- hdu 2795 Billboard(线段树)
- HDU-2795-Billboard (线段树)
- 【HDU】 2795 Billboard(线段树)
- HDU 2795 Billboard(线段树)
- HDU 2795 Billboard(简单线段树)
- HDU - 2795 - Billboard (线段树)
- hdu 2795 Billboard(线段树)
- hdu 2795 Billboard(线段树)
- HDU 2795 Billboard(线段树)
- HDU 2795 Billboard (线段树)
- HDU 2795 Billboard (线段树+想法)
- shell——for&while&select
- VS2010应用程序的打包与图标设置
- NAT详解
- seo优化必须知道的sitemap.xml的写法
- solr5.2.1
- HDU 2795 Billboard(线段树)
- 结构型模式-适配器模式
- 1230 火星 A+B
- 路由和NAT的区别与联系
- 骑士的移动(Knight Moves,UVa 439)
- android APK应用安装过程以及默认安装路径
- 用CasperJs自动浏览页面
- 关于face++出现1302 IMAGE_ERROR_FAILED_TO_DOWNLOAD错误的一点思路
- 让效率“爆表”的49个数据可视化工具