HDU-2795 Billboard 线段树单点更新
2014-03-28 22:12
417 查看
题目链接
#include "stdio.h" const int maxn = 200005; int tree[maxn*3]; int v,w,ans; int Min( int a,int b ) { return a<b?a:b; } void buildtree( int ld,int rd,int t ) { tree[t] = 0; if( ld == rd ) return; else { int mid = ( ld+rd )>>1; buildtree( ld,mid,t*2 ); buildtree( mid+1,rd,t*2+1 ); } } void updata( int ld,int rd,int t ) { if( ld==rd ) { if( tree[t] + v > w ) return; tree[t] += v; ans = rd; } else { int mid = ( ld+rd )>>1; if( tree[t*2]+v <= w ) updata( ld,mid,t*2 ); else if( tree[t*2+1]+v <= w ) updata( mid+1,rd,t*2+1 ); tree[t] = Min( tree[t*2] , tree[t*2+1]); } } int main() { int i,h,n,len; while( scanf("%d%d%d",&h,&w,&n)==3 ) { len = h<n?h:n; buildtree( 1,len,1 ); for( i=1;i<=n;i++ ) { scanf("%d",&v); // v the width of i-th announcement if( v > w ) printf("-1\n"); else { ans = -1; updata( 1,len,1 ); printf("%d\n",ans); } } } return 0; }
相关文章推荐
- hdu 2795 Billboard(线段树+单点更新)
- HDU 2795 Billboard (线段树 单点更新 区间求最大值)
- HDU 2795 Billboard 线段树单点更新
- HDU 2795 Billboard (线段树单点更新)
- HDU 2795 Billboard // 线段树 单点更新
- HDU 2795 Billboard(线段树,单点更新)
- Billboard----HDU_2795----线段树之单点更新
- 线段树练习[单点更新] 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 线段树单点更新