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 ...
随机推荐
- 创建局域网内远程git仓库,并将本地仓库push推到远程仓库中
转载请注明出处 http://www.goteny.com/articles/2014/06/136.html http://www.cnblogs.com/zjjne/p/3778640.html ...
- C51 库函数(3)
3.3 STRING.H:串函数 串函数通常将指针串作输入值.一个串就包括2个或多个字符.串结以空字符表示.在函数memcmp,memcpy,memchr,memccpy,memmove和memset ...
- MFC浅析(4) CObject浅析
MFC CObject浅析 1.CObject简要声明 2.CRuntimeClass结构 3.RUNTIME_CLASS 4.DYNAMIC支持 5.DYNCREATE支持 6.SERIAL支持 C ...
- LD1-K(求差值最小的生成树)
题目链接 /* *题目大意: *一个简单图,n个点,m条边; *要求一颗生成树,使得其最大边与最小边的差值是所有生成树中最小的,输出最小的那个差值; *算法分析: *枚举最小边,用kruskal求生成 ...
- Linux操作系统以及各大发行版介绍——Linux operating system and major distribution is introduced
什么是Linux? 也许很多人会不屑的说,Linux不就是个操作系统么.错!Linux不是一个操作系统,严格来讲,Linux只是一个操作系统中的内核.内核是什么?内核建立了计算机软件与硬件之间通讯的平 ...
- VLC网页插件添加对火狐浏览器的支持
原文转自:http://blog.csdn.net/gsls200808/article/details/25536113 1.用<embed>标签 下面这段代码只支持火狐,不支持IE & ...
- 完整版的OpenLDAP搭建全过程
总结: 先写总结,再写正文,嘿嘿嘿.这还是第一次认真的写个文档,写个总结,哈哈.大概在一个月前,第一次听说这个东西,完全没有概念,刚开始的时候看理论的知识,看了几次之后就没看了,看不 ...
- lamp安装指南(转)
主要软件包, 1. httpd-2.2.6.tar.gz 2. mysql-5.0.45-linux-i686-glibc23.tar.gz ( 这个版本是已编译好的压缩包,解压后稍做配置即可使用 ) ...
- 1629 - Cake slicing(DP)
花了近2个小时终于AC,好爽.. 一道类似于最优矩阵链乘的题目,受<切木棍>那道题的启示,该题的原理也是一样的,仅仅只是变成了且面积.那么对应的也要添加维度 . 显然要完整的表示状态,最少 ...
- 【iOS知识学习】_iOS沙盒机制
IOS中的沙盒机制(SandBox)是一种安全体系,它规定了应用程序仅仅能在为该应用创建的目录内读取文件,不能够訪问其它地方的内容.全部的非代码文件都保存在这个地方.比方图片.声音.属性列表和文本文件 ...