hdu 2795 Billboard(线段树)
2013-07-14 23:27
281 查看
hhanger大牛的题。我在他的博客里看到这道题是线段树,但是对着题目枯死良久,也想不明白该怎么建树。直到我看到一篇博客。
博客链接:点击打开链接
只要能想清楚怎么建树,这道题其实还是比较水的。
博客链接:点击打开链接
只要能想清楚怎么建树,这道题其实还是比较水的。
#include<stdio.h> #include<string.h> #define N 200005 struct node { int l,r; int x; }a[N*3]; int h,w,n; int Max(int x,int y) { if(x>y) return x; else return y; } void CreatTree(int t,int x,int y) { a[t].l=x; a[t].r=y; a[t].x=w; if(x==y) return ; int temp=t*2; int mid=(x+y)/2; CreatTree(temp,x,mid); CreatTree(temp+1,mid+1,y); return ; } int FindTree(int t,int x) { int ans; if(a[t].l==a[t].r) { int temp=a[t].x; a[t].x-=x; return a[t].l; } int temp=t*2; if(a[temp].x>=x) ans=FindTree(temp,x); else ans=FindTree(temp+1,x); a[t].x=Max(a[temp].x,a[temp+1].x); return ans; } int main() { while(scanf("%d%d%d",&h,&w,&n)!=EOF) { if(h<n) CreatTree(1,1,h); else CreatTree(1,1,n); while(n--) { int x; scanf("%d",&x); if(a[1].x>=x) printf("%d\n",FindTree(1,x)); else printf("-1\n"); } } return 0; }
相关文章推荐
- hdu 2795 Billboard 线段树
- HDU 2795——Billboard(线段树)
- HDU2795 Billboard 线段树
- HDU 2795 Billboard 线段树
- Billboard - HDU 2795 线段树
- hdu 2795 Billboard(线段树)
- hdu 2795 Billboard 线段树
- hdu 2795 Billboard 线段树单点更新(线段树+二分)
- hdu 2795 Billboard 线段树 单点更新
- hdu 2795 Billboard(线段树)
- hdu-2795Billboard(线段树 找到可以贴当前广告最上方的位置)
- hdu 2795 Billboard(线段树)
- HDU2795 Billboard(线段树基础题单节点更新区间查询)
- HDU 2795 Billboard(线段树)
- hdu 2795 Billboard(线段树-单点更新)
- hdu 2795 Billboard【线段树,区间求最大值,点更新在区间操作中进行】
- hdu2795-Billboard(经典线段树)
- hdu 2795 Billboard (线段树,单点更新)
- hdu 2795 Billboard 线段树
- HDU - 2795 - Billboard (线段树)