HDU 2795
来源:互联网 发布:mac无法更新软件 编辑:程序博客网 时间:2024/05/23 22:38
http://acm.hdu.edu.cn/showproblem.php?pid=2795
这题由于最多能用到的行数是min(h,n),所以每次就以min(h,n)来建立线段树,树的节点中存放当前区间内所有行中所用长度的最小值,每次更新和查询都要更新到叶子节点,所以我就把更新和查询写到了一个函数里面。以下为代码:
#include <cstdio>#include <cstring>#include <vector>#include <queue>#include <iostream>#include <stack>#include <map>#include <string>#include <iterator>#include <algorithm>#include <cmath>using namespace std;#define M 200005struct node{ int l , r , sum;}T[M*4];int h , w , n , m , num[M];void Build(int l , int r , int rt){ T[rt].l = l; T[rt].r = r; T[rt].sum = 0; if (l == r)return; int mid = (T[rt].l+T[rt].r)>>1; Build(l,mid,rt<<1); Build(mid+1,r,rt<<1|1);}int Query(int len , int rt){ if (w-T[rt].sum < len)return -1; if (T[rt].l == T[rt].r) { T[rt].sum += len; return T[rt].l; } int ret; if (w-T[rt<<1].sum < len)ret = Query(len,rt<<1|1); else ret = Query(len,rt<<1); T[rt].sum = min(T[rt<<1].sum,T[rt<<1|1].sum); return ret;}int main(){ int i , k; while (~scanf("%d%d%d",&h,&w,&n)) { m = min(h,n); Build(1,m,1); for (i = 0 ; i < n ; i++) { scanf("%d",&k); printf("%d\n",Query(k,1)); } } return 0;}
- hdu 2795
- hdu 2795
- hdu 2795
- HDU 2795
- HDU 2795
- HDU 2795
- hdu 2795
- hdu 2795
- hdu(2795)
- HDU 2795
- hdu 2795
- hdu 2795
- hdu 2795
- hdu 2795
- hdu 2795
- HDU 2795
- hdu 2795
- hdu 2795
- 数塔问题----动态规划
- 让用户知道程序执行的百分比 progress of program excution
- 差分约束专题
- AndroidManifest.xml
- ubuntu12.04安装sqldeveloper及各种问题汇总
- HDU 2795
- ubuntu 无法找到软件源,和更新器 update-manager 时
- Objective-C block(代码块)
- 递归算法——全排列
- 《敏捷软件测试:测试人员与敏捷团队的实践指南》学习体会(二)
- 电影说明里何谓枪版?何谓TS版?TC版?
- mesh生成时候的注意事项
- notes for myself
- Service-generated Big Data and Big Data-as-a-Service: An Overview