【HDU】 2795 Billboard(线段树)
2015-02-11 21:36
513 查看
sum表示的是区间的剩余容纳长度
#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<cstdio> #include<algorithm> using namespace std; #define MAX 200005 #define ls rt<<1 #define rs rt<<1|1 #define mid (l+r)>>1 int sum[MAX << 2]; int h, w, n; int ww; void uprt(int rt) { sum[rt] = max(sum[ls], sum[rs]); } void build(int l,int r,int rt) { sum[rt] = w; if (l == r) { return; } int m = mid; build(l, m, ls); build(m + 1, r, rs); } int query(int p, int l, int r, int rt) { if (l == r) { sum[rt] -= p; return l; } int ans = -1; int m = mid; if (p <= sum[ls]) ans = query(p, l, m, ls); else if (p<=sum[rs]) ans = query(p, m + 1, r, rs); uprt(rt); return ans; } int main() { while (cin >> h >> w >> n) { int k = min(h, n); build(1, k, 1); for (int i = 0; i < n; i++) { scanf("%d", &ww); if (ww>sum[1]) printf("-1\n"); else printf("%d\n", query(ww, 1, k, 1)); /* 写成这样就WA */ //printf("%d\n", query(ww, 1, k, 1)); } } return 0; }
相关文章推荐
- 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(线段树)
- hdu2795-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 (线段树)