hdu2795(线段树单点更新)
来源:互联网 发布:如何减去腹部赘肉 知乎 编辑:程序博客网 时间:2024/05/16 04:41
每个节点维护所包含区间剩余空间的最大值
#include<algorithm>#include<iostream>#include<cstdio>using namespace std;int a[200005];int tree[200005*4];int h,w,n;void Pushup(int p){ tree[p]=max(tree[p<<1],tree[p<<1|1]); //记录其子树中已经出现的点的数量}void Build(int p,int l,int r){ if(l==r){ tree[p]=w; return; } int mid=(l+r)/2; Build(p<<1,l,mid); Build(p<<1|1,mid+1,r); Pushup(p);}int Update(int p,int l,int r,int x){ if(l==r){ tree[p]-=x; return l;} //更新叶子节点,即每条宽的长 int mid=(l+r)/2; int ret; if(tree[p<<1]>=x) ret=Update(p<<1,l,mid,x); else ret=Update(p<<1|1,mid+1,r,x); Pushup(p); //更新当前节点 return ret;}/*int Query(int p,int l,int r,int x,int y){ if(x<=l&&y>=r) return tree[p]; int mid=(l+r)/2; if(y<=mid) return Query(p<<1,l,mid,x,y); else if(x>mid) return Query(p<<1|1,mid+1,r,x,y); else return (Query(p<<1,l,mid,x,mid)+Query(p<<1|1,mid+1,r,mid+1,y));}*/int main(){ int n,m; while(scanf("%d%d%d",&h,&w,&n)!=EOF) { if(h>n) h=n; Build(1,1,h); int sum=0; for(int i=1;i<=n;i++) { scanf("%d",&a[i]); if(tree[1]<a[i]) puts("-1"); else printf("%d\n",Update(1,1,h,a[i])); } } return 0;}
0 0
- hdu2795(线段树单点更新)
- hdu2795 Billboard(线段树,单点更新)
- hdu2795 Billboard (线段树,单点更新)
- hdu2795(线段树单点更新)
- hdu2795 线段树单点更新
- HDU2795:Billboard(线段树单点更新)
- HDU2795 Billboard 【线段树】+【单点更新】
- hdu2795 Billboard(线段树单点更新)
- HDU2795 Billboard 线段树 单点更新
- HDU2795 Billboard 线段树单点更新变形
- HDU2795线段树之单点更新
- HDU2795 线段树 单点更新 区间最大值
- hdu2795 Billboard 线段树单点更新区间最值
- HDU2795 Billboard(线段树单点更新,区间最大值)
- hdu2795 线段树~~~单点更新,区间最值。
- hdu2795 Billboard(单点更新)
- hdu2795 Billboard(单点更新)
- hdu2795(线段树,节点更新)
- 在Android Studio中进行单元测试和UI测试
- 异常处理最佳实践
- 解决less的data-uri函数无法处理相对路径的Bug
- 链表分割
- 数据库创建以及使用
- hdu2795(线段树单点更新)
- SoapUI 测试Data Driven(数据驱动测试)
- 欢迎使用CSDN-markdown编辑器
- C语言DAY 13 - 结构体和枚举
- 网络音乐播放器项目学习知识点总结
- TCP状态图
- Hibernate备忘录-映射文件
- MAC上android studio NDK亲测可行
- n&(n-1)n-1 应用