HDU 2795 Billboard(单点更新)
来源:互联网 发布:掐指算法 编辑:程序博客网 时间:2024/06/08 05:43
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2795
以高度作为区间,每个节点存区间内所剩的最长长度。
代码如下。
#include <iostream>#include <iomanip>#include <cstdio>#include <algorithm>#include <cmath>#include <queue>#include <vector>#include <stack>#include <string>#include <cstring>#include <cassert>using namespace std;typedef long long ll;const int maxn=222222;const int INF=0x7fffffff;const int mod=1e7+7;#define LSON l,m,rt<<1#define RSON m+1,r,rt<<1|1#define ESP 1e-7int mm[maxn<<2],h,w,n;void pushup(int rt) { mm[rt]=max(mm[rt<<1],mm[rt<<1|1]);//节点存该区间最长的宽}void build(int l,int r,int rt) { mm[rt]=w; if(l==r) return ; int m=(l+r)>>1; build(LSON); build(RSON);}int query(int x,int l,int r,int rt) { if(l==r) { mm[rt]-=x;//对每次查询同时进行更新 return l; } int temp; int m=(l+r)>>1; if(mm[rt<<1]>=x) temp=query(x,LSON); else temp=query(x,RSON); pushup(rt); return temp;}int main() { while(~scanf("%d%d%d",&h,&w,&n)) { h=min(h,n); build(1,h,1); for(int i=0;i<n;i++) { int x; scanf("%d",&x); if(mm[1]<x) printf("-1\n"); else printf("%d\n",query(x,1,h,1)); } } return 0;}
0 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(线段树单点更新)
- hdu 2795 Billboard(线段树单点更新)
- HDU 2795 Billboard(线段树单点更新)
- hdu 2795 Billboard(线段树 单点更新)
- hdu 2795 Billboard(线段树+单点更新)
- 数据结构 线段树 HDU 2795Billboard(单点更新)
- HDU 2795 Billboard [线段树-单点更新]
- hdu 2795 Billboard 线段树 单点更新
- HDU 2795 Billboard / 线段树单点更新
- HDU-2795 Billboard 线段树单点更新
- js获取url参数值的两种方式详解
- sendToTarget与sendMessage
- 项目四 用类解决关于图书馆的书的问题
- Problem F 字符串替换
- list
- HDU 2795 Billboard(单点更新)
- Dos下常用的网络相关的命令
- 【Java二十周年】Java注解处理器
- CVTE实习应聘经验
- Android常见面试题汇集
- 【黑马程序员】---Foundation框架总结01
- Miscosoft Visual Studio项目guid取值
- 高仿优酷Android客户端图片左右滑动(自动切换)
- 第一篇博客。