L - Vases and Flowers - hdu 4614(区间操作)
- #include<algorithm>
- #include<stdio.h>
- using namespace std;
- #define lson r<<1
- #define rson r<<1|1
- const int MAXN = 1e5+;
- struct stgmentTree
- {//sum花瓶的剩余量
- int x, y, sum, cover;//cover, 操作1赋值为释放花瓶,操作2沾满花瓶
- int mid(){return (x+y)>>;}
- int len(){return y-x+;}
- }a[MAXN<<];
- int ans;
- void Build(int r, int x, int y)
- {
- a[r].x = x, a[r].y = y;
- a[r].sum = a[r].len(), a[r].cover = ;
- if(x == y)
- return ;
- Build(lson, x, a[r].mid());
- Build(rson, a[r].mid()+, y);
- }
- void Down(int r)
- {
- if(a[r].x != a[r].y && a[r].cover)
- {
- a[lson].cover = a[rson].cover = a[r].cover;
- a[lson].sum = a[r].cover== ? : a[lson].len();
- a[rson].sum = a[r].cover== ? : a[rson].len();
- a[r].cover = ;
- }
- }
- void Insert(int r, int x, int y, int op)
- {
- if(a[r].x == x && a[r].y == y)
- {
- ans += a[r].len()-a[r].sum;
- a[r].cover = op;
- a[r].sum = (op== ? : a[r].len());
- return ;
- }
- Down(r);
- if(y <= a[r].mid())
- Insert(lson, x, y, op);
- else if(x > a[r].mid())
- Insert(rson, x, y, op);
- else
- {
- Insert(lson, x, a[r].mid(), op);
- Insert(rson, a[r].mid()+, y, op);
- }
- a[r].sum = a[rson].sum + a[lson].sum;
- }
- int QueryPreSum(int r, int k)//求k前面的空花瓶数
- {
- Down(r);
- if(a[r].x == a[r].y)
- return ;
- if(k <= a[r].mid())
- return QueryPreSum(lson, k);
- else
- return a[lson].sum + QueryPreSum(rson, k);
- }
- int QueryLast(int r, int p)//查找第p个花瓶位置
- {
- Down(r);
- if(a[r].x == a[r].y)
- return a[r].x;
- if(a[lson].sum >= p)
- return QueryLast(lson, p);
- else
- return QueryLast(rson, p-a[lson].sum);
- }
- int main()
- {
- int T;
- scanf("%d", &T);
- while(T--)
- {
- int N, M, op, x, y, L, R;
- scanf("%d%d", &N, &M);
- Build(, , N-);
- while(M--)
- {
- scanf("%d%d%d", &op, &x, &y);
- if(op == )
- {
- int PreSum = QueryPreSum(, x);
- if(PreSum == a[].sum)
- printf("Can not put any one.\n");
- else
- {
- L = QueryLast(, PreSum+);
- if(PreSum+y >= a[].sum)
- PreSum = a[].sum;
- else
- PreSum += y;
- R = QueryLast(, PreSum);
- Insert(, L, R, );
- printf("%d %d\n", L, R);
- }
- }
- else
- {
- ans = ;
- Insert(, x, y, );
- printf("%d\n", ans);
- }
- }
- printf("\n");
- }
- return ;
- }
- /*
- 2
- 10 8
- 1 2 5
- 2 3 4
- 1 0 8
- 2 2 5
- 1 6 1
- 1 4 4
- 1 2 3
*/
L - Vases and Flowers - hdu 4614(区间操作)的更多相关文章
- L - Vases and Flowers HDU - 4614 线段树+二分
题意 给出一排空花瓶 有两种操作 1是 从A花瓶开始放F朵花 如果当前瓶有花就跳过前往下一个 直到花用完或者 瓶子到了最后一个为止 输出 成功放花的第一个和最后一个 如果没有输出 can not. ...
- HDU-4614 Vases and Flowers 线段树区间更新
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4614 线段树保存区间是否被覆盖以及区间的和即可,在询问的时候在线段树上二分查找就可以了...代码写得比 ...
- 【HDU 4614】Vases and Flowers(线段树区间更新懒惰标记)
题目0到n-1的花瓶,操作1在下标a开始插b朵花,输出始末下标.操作2清空[a,b]的花瓶,求清除的花的数量.线段树懒惰标记来更新区间.操作1,先查询0到a-1有num个空瓶子,然后用线段树的性质,或 ...
- 2013 多校联合2 D Vases and Flowers (hdu 4614)
Vases and Flowers Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others ...
- HDU 4614 Vases and Flowers(线段树+二分)
Vases and Flowers Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others ...
- HDU 4614 Vases and Flowers (2013多校2 1004 线段树)
Vases and Flowers Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others ...
- HDU-4614 Vases and Flowers(线段树区间更新+二分查找)
http://acm.hdu.edu.cn/showproblem.php?pid=4614 Time Limit: 4000/2000 MS (Java/Others) Memory Limi ...
- HDU 4578——Transformation——————【线段树区间操作、确定操作顺序】
Transformation Time Limit: 15000/8000 MS (Java/Others) Memory Limit: 65535/65536 K (Java/Others)T ...
- HDU 1754 I Hate It (Splay 区间操作)
题目大意 维护一个序列,支持两种操作 操作一:将第x个元素的值修改为y 操作二:询问区间[x,y]内的元素的最大值 解题分析 splay的区间操作,事先加入两个编号最小和最大的点防止操作越界. 具体的 ...
随机推荐
- Activity的任务栈Task以及启动模式与Intent的Flag详解
什么是任务栈(Task) 官方文档是这么解释的 任务是指在执行特定作业时与用户交互的一系列 Activity. 这些 Activity 按照各自的打开顺序排列在堆栈(即“返回栈”)中. 其实就是以栈的 ...
- ansible小结
一.Ansible的安装 1.yum源安装 以centos为例,默认在源里没有ansible,不过在fedora epel源里有ansible,配置完epel 源后,可以直接通过yum 进行安装.这里 ...
- python 全栈开发之路 day1
python 全栈开发之路 day1 本节内容 计算机发展介绍 计算机硬件组成 计算机基本原理 计算机 计算机(computer)俗称电脑,是一种用于高速计算的电子计算机器,可以进行数值计算,又可 ...
- C#学习第三天
经过这几天的学习,真的有点觉得以前C学的太不好现在学C#也不顺畅,虽然很多东西都似曾相识,但是就是还得看好几遍才能记得住,而且现在都是简单的东西,还没有看到重载等稍微难点的地方.应该好好努力了,昨天忙 ...
- Spring.Net+NHibernate+asp.net mvc + easyui
毕业4个月的入手项目..前段时间在公司一直做的维护..为了弄明白自己也就跟着写了一个,目前也正在学习:不对的或者是有更好的还请各位赐教. 在学习的过程中主要参考::http://www.cnblogs ...
- sql的一些小东西
1.sa账户密码丢失. 先用wiondows验证登陆,然后新建查询 “ ALTER LOGIN [sa] WITH PASSWORD = N'NewPassword' ”
- spring aop pointcut 切入点是类的公共方法(私有方法不行),还是接口的方法
spring aop pointcut 切入点是类的公共方法(私有方法不行),还是接口的方法 类的公共方法可以,但是私有方法不行 测试一下接口的方法是否能够捕捉到
- Wpf控件ListBox使用实例2
2.Xaml绑定选择结果 <StackPanel Orientation="Vertical"> <TextBlock Margin="10,10,10 ...
- ManagementException:WMI异常处理介绍
.NET调用WMI后无论是同步调用还是异步调用,都会产生返回一个int类型的执行结果.如果成功,则返回0.如果不是0,则有对应错误码表示发生了什么错误. 根据咱们这个系列的博文,我总结了关于进程,服务 ...
- (转)如何将ecshop首页主广告位的flash轮播替换为js轮播
转之--http://www.ecshoptemplate.com/article-1710.html 这个ecshop很常见,因为现在比起flash难以修改,js更加符合人们的使用习惯,而默认ecs ...