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的区间操作,事先加入两个编号最小和最大的点防止操作越界. 具体的 ...
随机推荐
- struts2常用的常量constant(转)
原文地址:http://blog.csdn.net/wfcaven/article/details/5937548 常用的常量配置 struts.serve.static.browserCache ...
- 1、第1课.net学习2150916
HTML标签 1.<p> <p> 标签 段落标签 2.<h1-6></h1> 文字标签从1-6 3. <i></i> 斜体 &l ...
- Activity对话框
对话框Activity style 在style.xml中加入 <!--对话框风格--> <style name="dialog" parent="@a ...
- Java实现文件上传
最近自己在做一个小系统玩的时候涉及到了文件的上传,于是在网上找到Java上传文件的方案,最后确定使用common-fileupload实现上传操作. 需求说明 用户添加页面有一个“上传”按钮,点击按钮 ...
- java中的IO一
一.IO操作的目标 IO的流向 二.IO的分类方法 1.第一种分法:输入流.输出流 2.第二种分法:字节流.字符流 3.第三种分法:节点流.处理流 三.IO当中的核心类 核心类中的核心方法 Input ...
- asp.net使用dorpdownlist绑定无限级分类
/// <summary> /// 绑定父项分类 /// </summary> protected void DDLBindClass( ...
- 说说RMAN里的obsolete
RMAN> report obsolete; RMAN retention policy will be applied to the commandRMAN retention policy ...
- 浮点与整形在GUI下的相关思考
平时不接触绘图,似乎感觉不到浮点和整形所带来的区别,这次项目中意外的碰到了浮点与整形进行迁移的工作.因此写点心得,让自己以后也可以看看. 用浮点作图有个最大的弊端就是边界情况,比如你需要在点(20,2 ...
- 初涉JavaScript模式 (8) : 函数 【概述】
什么是函数 函数,是一个大型程序中的某部份代码,由一个或多个语句块组成.它负责完成某项特定任务,而且相较于其他代码,具备相对的独立性.(维基百科) 函数的特点 第一类对象 在JavaScript世界中 ...
- iOS开发——常用Runtime函数
Runtime函数 1.可以通过NSObject的一些方法获取运行时信息或动态执行一些消息:1./*Returns a Boolean value that indicates whether the ...