hdu 2795 Billboard 线段树
2014-03-09 17:06
344 查看
以高为数轴,维护每个区间的剩余最大值,用线段树二分做
#include <stdio.h> #define maxn 200100 int Max[4*maxn]; int h,w,n; int max(int a,int b) { if(a>b) return a; else return b; } void build(int l,int r,int o) { Max[o]=w; if(l==r) return ; int m=(l+r)/2; build(l,m,2*o); build(m+1,r,2*o+1); } int query(int x,int l,int r,int o) { if(l==r) { Max[o]-=x; return l; } int m=(l+r)/2; int ans; if(Max[o*2]>=x) ans=query(x,l,m,o*2); else ans=query(x,m+1,r,o*2+1); Max[o]=max(Max[2*o],Max[2*o+1]); return ans; } int main() { int i; while(scanf("%d%d%d",&h,&w,&n)!=EOF) { if(h>n) h=n; build(1,h,1); int x; for(i=1;i<=n;i++) { scanf("%d",&x); if(Max[1]<x) printf("-1\n"); else printf("%d\n",query(x,1,h,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(线段树,单点查询)
- hdu2795 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--线段树