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)
Total Submission(s): 347 Accepted Submission(s): 108
For each test case, the first line contains two integers N(1 < N < 50001) and M(1 < M < 50001). N is the number of vases, and M is the operations of Alice. Each of the next M lines contains three integers. The first integer of one line is K(1 or 2). If K is 1, then two integers A and F follow. It means Alice receive F flowers and try to put a flower in the vase A first. If K is 2, then two integers A and B follow. It means the owner would like to clean the vases numbered from A to B(A <= B).
Output one blank line after each test case.
http://acm.hdu.edu.cn/showproblem.php?pid=4614
思路:很基本的线段树问题,我们可以用线段树维护每一个区间的剩余空间数量(也就是可以插画的地方),对于第一个询问,我们计算区间[a,n-1]所剩余的空间数,假设为num,若为0,则输出 “Can not put any one.”,否则若小于F,则将F设为num,接下来可以二分区间[a,mid]来确定插入的第一只花和最后一只花的位置l,r,然后将区间[l,r]全赋值为1即可,对于询问2,则计算出区间[a,b]所剩余的空间num,然后 b-a+1-num即为答案。最后将区间[a,b]赋值为1.以上,下面是代码.
#include <iostream>
#include <string.h>
#include <algorithm>
#include <stdio.h>
#define maxn 50010
#define mid ((t[p].l+t[p].r)>>1)
#define ls (p<<1)
#define rs (ls|1)
using namespace std;
struct tree
{
int l,r;
int sum;
int lazy;
}t[maxn<<2];
void pushup(int p)
{
t[p].sum=t[ls].sum+t[rs].sum;
}
void pushdown(int p)
{
if(t[p].lazy==0)
{
t[ls].lazy=0;
t[rs].lazy=0;
t[ls].sum=0;
t[rs].sum=0;
t[p].lazy=-1;
}
else if(t[p].lazy==1)
{
t[ls].lazy=1;
t[rs].lazy=1;
t[ls].sum=t[ls].r-t[ls].l+1;
t[rs].sum=t[rs].r-t[rs].l+1;
t[p].lazy=-1;
}
}
void build(int p,int l,int r)
{
t[p].l=l,t[p].r=r,t[p].sum=1,t[p].lazy=-1;
if(l==r)
return;
build(ls,l,mid);
build(rs,mid+1,r);
pushup(p);
}
void change(int p,int l,int r,int val)
{
if(t[p].l==l&&t[p].r==r)
{
t[p].lazy=val;
if(val)
{
t[p].sum=r-l+1;
}
else
t[p].sum=0;
return;
}
pushdown(p);
if(l>mid)
change(rs,l,r,val);
else if(r<=mid)
change(ls,l,r,val);
else
{
change(ls,l,mid,val);
change(rs,mid+1,r,val);
}
pushup(p);
}
int query(int p,int l,int r)
{
if(t[p].l==l&&t[p].r==r)
{
return t[p].sum;
}
pushdown(p);
if(l>mid)
return query(rs,l,r);
else if(r<=mid)
return query(ls,l,r);
else
return query(ls,l,mid)+query(rs,mid+1,r);
}
int main()
{
//freopen("dd.txt","r",stdin);
int ncase;
scanf("%d",&ncase);
while(ncase--)
{
int n,m,i;
scanf("%d%d",&n,&m);
build(1,0,n-1);
int k,a,b;
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&k,&a,&b);
if(k==1)
{
int ttmp=query(1,a,n-1);
if(ttmp==0)
{
printf("Can not put any one.\n");
}
else
{
if(ttmp<b)
b=ttmp;
int mi=a,ma=n-1,Mid;
int l,r;
while(mi<=ma)
{
Mid=(mi+ma)>>1;
if(query(1,a,Mid)>0)
{
l=Mid;
ma=Mid-1;
}
else
mi=Mid+1;
}
mi=a,ma=n-1;
while(mi<=ma)
{
Mid=(mi+ma)>>1;
if(query(1,a,Mid)>=b)
{
r=Mid;
ma=Mid-1;
}
else
mi=Mid+1;
}
change(1,l,r,0);
printf("%d %d\n",l,r);
}
}
else
{
printf("%d\n",b-a+1-query(1,a,b));
change(1,a,b,1);
} }
printf("\n");
}
return 0;
}
2013 多校联合2 D Vases and Flowers (hdu 4614)的更多相关文章
- 2013 多校联合 F Magic Ball Game (hdu 4605)
http://acm.hdu.edu.cn/showproblem.php?pid=4605 Magic Ball Game Time Limit: 10000/5000 MS (Java/Other ...
- L - Vases and Flowers - hdu 4614(区间操作)
题意:有两种操作,第一种从A开始插花,如果有花就跳到下一个,然后输出最后一个花瓶的编号,如果花瓶不够把多余的花丢掉.操作2把区间清空 分析:很明显的线段树操作,就是插花的时候麻烦一下,需要先找出来他剩 ...
- L - Vases and Flowers HDU - 4614 线段树+二分
题意 给出一排空花瓶 有两种操作 1是 从A花瓶开始放F朵花 如果当前瓶有花就跳过前往下一个 直到花用完或者 瓶子到了最后一个为止 输出 成功放花的第一个和最后一个 如果没有输出 can not. ...
- 2013多校联合2 I Warm up 2(hdu 4619)
Warm up 2 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total ...
- 2013 多校联合 2 A Balls Rearrangement (hdu 4611)
Balls Rearrangement Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Othe ...
- 2013多校联合3 G The Unsolvable Problem(hdu 4627)
2013-07-30 20:35 388人阅读 评论(0) 收藏 举报 http://acm.hdu.edu.cn/showproblem.php?pid=4627 The Unsolvable Pr ...
- 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 ...
- 2016暑假多校联合---Rikka with Sequence (线段树)
2016暑假多校联合---Rikka with Sequence (线段树) Problem Description As we know, Rikka is poor at math. Yuta i ...
- 2016暑假多校联合---Windows 10
2016暑假多校联合---Windows 10(HDU:5802) Problem Description Long long ago, there was an old monk living on ...
随机推荐
- SpringMVC入门2-注解开发
Spring MVC 注解开发 <context:component-scan base-package="com.controls" /> Springmvc的扫描器 ...
- UML问题
1.在创建协作图时需要先确定参与者,而协作图的工具栏里是没有Actor的,这是需要先new Actor,然后把其拖动到工作区:实验过程中发现必须创建在用例视图下,若是创建在逻辑试图下那么根本无法继续操 ...
- Chrome extension
PageSpeed Tincr SpriteMe JSONView FireMobileSimulator for Google Chrome™
- h.264 Bi-Predictive Motion Search
在做B帧的运动预测时,有两组参考图像列表(refList0, refList1),需要进行分别前向预测.后向预测.传统的预测方式是: 对refList0进行前向预测,得到最佳前向ref与mv. 对re ...
- Android-RecyclerView-Item点击事件设置
在上一篇博客Android-RecylerView初识中提到,RecyclerView不再负责Item视图的布局及显示,所以RecyclerView也没有为Item开放OnItemClick等点击事件 ...
- 树形dp+MST-hdu-4126-Genghis Khan the Conqueror
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4126 题目意思: 给一图,n个点,m条边,每条边有个花费,给出q条可疑的边,每条边有新的花费,每条可 ...
- CSDN总结的面试中的十大算法
1.String/Array/Matrix 在Java中,String是一个包含char数组和其它字段.方法的类.如果没有IDE自动完成代码,下面这个方法大家应该记住: toCharArray() / ...
- .net 安装remoting服务
程序->vs2008->vs tools->vs2008 命令提示 D:\QidianWorkShop\Develop\Source\Services\Snda.Qidian.Hon ...
- NSTemporaryDirectory 临时文件
唯一标识 : NSString*identifier=[[NSProcessInfoprocessInfo]globallyUniqueString]; 创建临时文件路径: NSString *fil ...
- js的简单模板解析
在编程中总是会遇见很多动态生成的东西,一般我们都是通过简单的html拼接起来的 function createHtml(name, phone, addr, email, imageSrc){ var ...