http://acm.hdu.edu.cn/showproblem.php?pid=4614

直接线段树维护

代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<cmath>
#include<set>
#include<map>
#include<stack>
#include<vector>
#include<algorithm>
#include<queue>
#include<bitset>
#include<deque>
#include<numeric> //#pragma comment(linker, "/STACK:1024000000,1024000000") using namespace std; typedef long long ll;
typedef unsigned int uint;
typedef pair<int,int> pp;
const double eps=1e-9;
const int INF=0x3f3f3f3f;
const ll MOD=1000000007;
const int N=50001;
struct node
{
int l,r,k;
int m;
}btr[N*4];
void update(int x,int l,int r,int k)
{
if(btr[x].l==l&&btr[x].r==r)
{
btr[x].k=k;
btr[x].m=k*(btr[x].r-btr[x].l+1);
return ;
}
if(btr[x].k!=-1)
{
btr[(x<<1)].k=btr[(x<<1)|1].k=btr[x].k;
btr[(x<<1)].m=(btr[(x<<1)].r-btr[(x<<1)].l+1)*btr[(x<<1)].k;
btr[(x<<1)|1].m=(btr[(x<<1)|1].r-btr[(x<<1)|1].l+1)*btr[(x<<1)|1].k;
}
int mid=(btr[x].l+btr[x].r)>>1;
if(r<=mid)
update((x<<1),l,r,k);
else if(l>mid)
update((x<<1)|1,l,r,k);
else
{
update((x<<1),l,mid,k);
update((x<<1)|1,mid+1,r,k);
}
btr[x].m=btr[(x<<1)].m+btr[(x<<1)|1].m;
if(btr[(x<<1)].k==btr[(x<<1)|1].k)
btr[x].k=btr[(x<<1)].k;
else
btr[x].k=-1;
}
int get(int x,int l,int r)
{
if(btr[x].l==l&&btr[x].r==r)
return btr[x].m;
if(btr[x].k!=-1)
return (btr[x].k*(r-l+1));
int mid=(btr[x].l+btr[x].r)>>1;
if(r<=mid)
return get((x<<1),l,r);
else if(l>mid)
return get((x<<1)|1,l,r);
else
return get((x<<1),l,mid)+get((x<<1)|1,mid+1,r);
}
void build(int x,int l,int r)
{//cout<<x<<" "<<l<<" "<<r<<endl;
btr[x].l=l;
btr[x].r=r;
btr[x].k=0;
btr[x].m=0;
if(l==r)
return ;
int mid=(l+r)>>1;
build((x<<1),l,mid);
build((x<<1)|1,mid+1,r);
}
int bs(int l,int r,int k)
{
int x=l;
while(l<=r)
{
int m=(l+r)>>1;
if((m-x+1-get(1,x,m))>=k)
r=m-1;
else
l=m+1;
}
return l;
}
int main()
{
//freopen("data.in","r",stdin);
int T;
scanf("%d",&T);
while(T--)
{
int n,m;
scanf("%d %d",&n,&m);
build(1,0,n-1);
while(m--)
{
int w;
scanf("%d",&w);
if(w==1)
{
int a,f;
scanf("%d %d",&a,&f);
int tmp=get(1,a,n-1);
if(tmp==(n-a)||f==0)
{printf("Can not put any one.\n");continue;}
f=min(f,n-a-tmp);
int l=bs(a,n-1,1);
int r=bs(a,n-1,f);
printf("%d %d\n",l,r);
update(1,l,r,1);
}else
{
int l,r;
scanf("%d %d",&l,&r);
printf("%d\n",get(1,l,r));
update(1,l,r,0);
}
}
printf("\n");
}
return 0;
}

hdu 4614 Vases and Flowers的更多相关文章

  1. HDU 4614 Vases and Flowers(线段树+二分)

    Vases and Flowers Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others ...

  2. 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 ...

  3. HDU 4614 Vases and Flowers(二分+线段树区间查询修改)

    描述Alice is so popular that she can receive many flowers everyday. She has N vases numbered from 0 to ...

  4. HDU 4614 Vases and Flowers(线段树+记录区间始末点或乱搞)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4614 题目大意:有n个空花瓶,有两种操作: 操作①:给出两个数字A,B,表示从第A个花瓶开始插花,插B ...

  5. hdu 4614 Vases and Flowers(线段树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4614 题意: 给你N个花瓶,编号是0  到 N - 1 ,初始状态花瓶是空的,每个花瓶最多插一朵花. ...

  6. HDU 4614 Vases and Flowers(线段树+二分)

    题目链接 比赛的时候一直想用树状数组,但是树状数组区间更新之后,功能有局限性.线段树中的lz标记很强大,这个题的题意也挺纠结的. k = 1时,从a开始,插b个花,输出第一个插的位置,最后一个的位置, ...

  7. hdu 4614 Vases and Flowers(线段树:成段更新)

    线段树裸题.自己写复杂了,准确说是没想清楚就敲了. 先是建点为已插花之和,其实和未插花是一个道理,可是开始是小绕,后来滚雪球了,跪了. 重新建图,分解询问1为:找出真正插画的开始点和终止点,做成段更新 ...

  8. HDU 4614 Vases and Flowers (2013多校第二场线段树)

    题意摘自:http://blog.csdn.net/kdqzzxxcc/article/details/9474169 ORZZ 题意:给你N个花瓶,编号是0 到 N - 1 ,初始状态花瓶是空的,每 ...

  9. hdu 4614 Vases and Flowers 线段树

    题目链接 一共n个盒子, 两种操作, 第一种是给出两个数x, y, 从第x个盒子开始放y朵花, 一个盒子只能放一朵, 如果某个盒子已经有了, 那么就跳过这个盒子放下面的盒子. 直到花放完了或者到了最后 ...

随机推荐

  1. Promise A 规范的一个简单的浏览器端实现

    简单的实现了一个promise 的规范,留着接下来模块使用.感觉还有很多能优化的地方,有时间看看源码,或者其他大神的代码 主要是Then 函数.回调有点绕人. !(function(win) { fu ...

  2. css处理浏览器兼容问题

    浏览器的兼容: _ ie6认识 格式:_width:100px;要写在最后面来覆盖前面的. * ie6和ie7都认识 格式:* width:100px;要写在最后面来覆盖前面的. \0 ie8认识  ...

  3. 基本分类方法——KNN(K近邻)算法

    在这篇文章 http://www.cnblogs.com/charlesblc/p/6193867.html 讲SVM的过程中,提到了KNN算法.有点熟悉,上网一查,居然就是K近邻算法,机器学习的入门 ...

  4. spring中的Log4jConfigListener作用和webapp.root的设置

    转:http://blog.sina.com.cn/s/blog_7bbf356c01016wld.html 使用spring中的Log4jConfigListener有如如下好处:     1. 动 ...

  5. mybatis动态sql中的trim标签的使用

    trim标记是一个格式化的标记,可以完成set或者是where标记的功能,如下代码: 1. select * from user <trim prefix="WHERE" p ...

  6. vitamio视频播放库

    vitamio视频播放库 http://www.d    evstore.cn/evaluation/testInfo/155-181.html

  7. 使用git命令提交远程github仓库的时候提示"rejected"(拒绝)解决办法

    今天使用在自己笔记本本地磁盘上使用Git命令行执行"git push"然后输入github的用户名和密码之后,报如下错误: ![rejected] master->maste ...

  8. shell如何在指定文件的指定位置后面添加内容

    最近工作中遇到一个问题,想在某个文件的指定位置后面添加一个标志位,要求在shell脚本里实现. 问题说明: 想在sys_config.fex文本的某个字符串后面添加一个flag 例如:sys_conf ...

  9. Spring框架的反序列化远程代码执行漏洞分析(转)

    欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...

  10. 打通B/S与C/S !让HTML5 WebSocket与.NET Socket公用同一个服务端!

    随着HTML5 WebSocket技术的日益成熟与普及,我们可以借助WebSocket来更加方便地打通BS与CS -- 因为B/S中的WebSocket可以直接连接到C/S的服务端,并进行双向通信.如 ...