HDU 2795 Billboard——特殊查询的线段树
2017-08-10 21:20
435 查看
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int maxn = 1e5 * 2 + 10; int h, w, n, date[maxn], segTree[maxn<<2]; void pushup(int root) { segTree[root] = max(segTree[root<<1], segTree[root<<1|1]); } void build(int L, int R, int root) { if (L == R) { segTree[root] = w; return; } int mid = (L + R)>>1; build(L, mid, root<<1); build(mid + 1, R, root<<1|1); pushup(root); } int query(int L, int R, int root, int val) { if (L == R) { segTree[root] -= val; return L; } int mid = (L + R)>>1; int ans = (segTree[root<<1] >= val) ? query(L, mid, root<<1, val) : query(mid + 1, R, root<<1|1, val); pushup(root); return ans; } int main() { while (scanf("%d %d %d", &h, &w, &n) == 3) { if (h > n) { h = n; } build(1, h, 1); for (int i = 1; i <= n; i++) { int temp; scanf("%d", &temp); if (segTree[1] < temp) { printf("-1\n"); } else { printf("%d\n", query(1, h, 1, temp)); } } } return 0; }
相关文章推荐
- HDU - 2795 Billboard 线段树查询区间最大值
- HDU 2795 Billboard(线段树,单点查询)
- HDU 2795 Billboard(线段树区间最值查询和单点更新)
- HDU 2795 Billboard (线段树:区间查询最大值)
- HDU 2795 Billboard (线段树,单点查询)
- HDU2795 - Billboard - 贪心+线段树log内查询更新
- 线段树 单点更新查询 区间最大值 hdu 2795 Billboard
- HDU2795 Billboard(线段树基础题单节点更新区间查询)
- HDU 2795 Billboard (线段树基础)
- HDU 2795 Billboard (线段树单点更新)
- hdu 2795 Billboard(线段树)
- HDU-2795 Billboard 线段树单点更新
- HDU 2795 Billboard(线段树)
- hdu2795 Billboard 线段树
- hdu 2795 Billboard(线段树单点更新)
- HDU 2795 Billboard 线段树
- hdu2795 Billboard(线段树单点更新)
- HDU 2795 线段树(单点更新 区间查询)
- HDU 2795 Billboard(线段树)
- HDOJ-2795 Billboard [线段树][单点更新+单点查询+维护区间最值]