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. 08 高效的SQL

    编写高效 SQL 需要以下知识 有关所查询内容的物理组织的知识 数据库能做什么的知识, 例如: 如果你不知道跳跃扫描索引及其用途, 那么你可能会看着模式说”索引丢了” SQL 所有错综复杂的知识 对目 ...

  2. odoo关联表查询方法

    testinfo=self.env['product.attribute.value'].search([('product_ids.product_tmpl_id','=',2047)]) for ...

  3. Android PopupWindows使用

    源码测试示例: package com.example.popupwindown; import android.os.Bundle; import android.app.Activity; imp ...

  4. Java中JTree的简单案例

    package ch12; import javax.swing.*; import javax.swing.tree.DefaultMutableTreeNode; /** * Created by ...

  5. IIS_各种问题

    IIS7中默认是已经加载了脚本映射处理.但今天装了个WIN7,装好IIS后却发现没有.于是手动去这安装,在添加html映射时提示:模块列表中必须要有IsapiModule或cgiModule 因为 I ...

  6. Ajax 完整教程 (转)

    http://www.cnblogs.com/Garden-blog/archive/2011/03/11/1981778.html

  7. python unicode字符串

    程序开发中,不同语言文字的显示,不同字符集之间的转换非常麻烦,在python的unicode的使用中,对这点感触颇深.所以,以下总结了python中对unicode字符处理的一些理解. 程序存储.传输 ...

  8. php学习记录 易混淆

    1.echo和print的区别 PHP中echo和print的功能基本相同(输出),但是两者之间还是有细微差别的.echo输出后没有返回值,但print有返回值,当其执行失败时返回flase.因此可以 ...

  9. php数据通信方式

    一:curl$ch = curl_init();curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);curl_setopt($ch,CURLOPT_TIMEOU ...

  10. javascript图片切换

    JavaScript 图片滑动切换效果 作者:cloudgamer 时间: 2009-09-25 文档类型:原创 来自:蓝色理想 第 1 页 JavaScript 图片滑动切换效果 [1] 第 2 页 ...