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. Codeforces708C Centroids 【树形dp】

    题目链接 题意:给定一棵n个结点的树,问:对于每个结点,能否通过删除一条边并添加一条边使得仍是树,并且删除该结点后得到的各个连通分量结点数 <= n/2? 题解:树形dp,两遍dfs,第一遍df ...

  2. thinkphp自动验证方法的使用

    建一个表单: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  3. gcc常用指令及相关知识

    1,gcc与g++的问题: 1.后缀为.c的,gcc把它当作是C程序,而g++当作是c++程序:后缀为.cpp的,两者都会认为是c++程序. 2.编译阶段,g++会调用gcc,对于c++代码,两者是等 ...

  4. jquery的tree table(树表)

    因项目需要,需要在表格中加入tree,使用了jquery的tree table,经美化,完美兼容各种框架的table: 请移步下载tree table 的js文件及css文件等,http://ludo ...

  5. kafka - topic

    http://www.cnblogs.com/yurunmiao/p/5550906.html http://www.cnblogs.com/chushiyaoyue/p/5695826.html

  6. OpenCV白平衡算法之灰度世界法(消除RGB受光照影响)

    在用OpenCV对图像进行处理时,利用颜色定位是常常会接触到的方法,但RGB受光照影响比较严重,转换到HSV XYZ等空间也解决不了时, 可以用白平衡算法进行修正,使其发黄.发蓝.发红的照片更加趋于自 ...

  7. 为什么在非UI线程中操作UI的改变失不安全的

    因为你如果允许在非UI线程更新操作UI的东西,那我再另一个非UI线程也可以更新这个Ui的东西 这样就会有冲突,比如你的线程刚好跑到修改UI这里,我的另一个UI也有可能跑到这里,所以这样导致线程不安全. ...

  8. 【CITE】C#默认以管理员身份运行程序实现代码

    //用于一种情况:C#软件打包后,在读写C盘文件时,会出现权限问题.使用管理员身份才可以运行 using System; using System.Collections.Generic; using ...

  9. avatar Logo

    用日志打印出自己的头像logo import java.io.File; import java.io.FileInputStream; import java.io.IOException; imp ...

  10. MySQL学习笔记_2_MySQL创建数据表(上)

    MySQL创建数据表(上) 一.创建数据表的SQL语句模型[弱类型] CREATETABLE [IF NOT EXISTS] 表名称( 字段名1列的类型[属性][索引], 字段名2 列的类型[属性][ ...