线段树裸题。自己写复杂了,准确说是没想清楚就敲了。

先是建点为已插花之和,其实和未插花是一个道理,可是开始是小绕,后来滚雪球了,跪了。

重新建图,分解询问1为:找出真正插画的开始点和终止点,做成段更新。

再次向notonlysuccess大神致谢,清晰的代码+清晰的思路=ac

 #include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std; #define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1 const int MAXN=;
int sum[MAXN<<];
int lag[MAXN<<];
int n; void PushUp(int rt)
{
if(lag[rt<<]==lag[rt<<|]&&lag[rt<<]!=-)
lag[rt]=lag[rt<<];
else
lag[rt]=-;
sum[rt]=sum[rt<<]+sum[rt<<|];
} void PushDown(int rt,int m)
{
if(lag[rt]!=-){
lag[rt<<]=lag[rt<<|]=lag[rt];
sum[rt<<]=(m-(m>>))*(-lag[rt]);
sum[rt<<|]=(m>>)*(-lag[rt]);
lag[rt]=-; }
} void Build(int l,int r,int rt)
{
lag[rt]=-;
if(l==r){
sum[rt]=;
return ;
}
int m=(l+r)>>;
Build(lson);
Build(rson);
PushUp(rt);
} void updata(int L,int R,int c,int l,int r,int rt)
{
if(L<=l&&r<=R){
sum[rt]=(r-l+)*(-c);
lag[rt]=c;
return ;
}
PushDown(rt,r-l+);
int m=(l+r)>>;
if(L<=m)updata(L,R,c,lson);
if(m<R)updata(L,R,c,rson);
PushUp(rt);
} int Query1(int L,int R,int l,int r,int rt)
{
if(L>R)
return ;
if(L<=l&&r<=R)
return sum[rt];
PushDown(rt,r-l+);
int m=(l+r)>>;
int res=;
if(L<=m)
res+=Query1(L,R,lson);
if(m<R)
res+=Query1(L,R,rson);
return res;
} int Query2(int p,int l,int r,int rt)
{
if(l==r)
return l;
PushDown(rt,r-l+);
int m=(l+r)>>;
if(p<=sum[rt<<])
return Query2(p,lson);
else
return Query2(p-sum[rt<<],rson);
}
int main()
{
int T,m;
int op,a,b,k;
int flag=;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m); Build(,n-,); for(k=;k<m;k++)
{
scanf("%d%d%d",&op,&a,&b); if(op==){
int s=Query1(a,n-,,n-,);
if(!s)
printf("Can not put any one.\n");
else {
int left=Query1(,a-,,n-,); int l=Query2(left+,,n-,);
int r=Query2(left+min(s,b),,n-,);
printf("%d %d\n",l,r);
updata(l,r,,,n-,);
}
}else {
printf("%d\n",b-a+-Query1(a,b,,n-,));
updata(a,b,,,n-,);
}
}
printf("\n");
}
return ;
}

hdu 4614 Vases and Flowers(线段树:成段更新)的更多相关文章

  1. HDU 1698 Just a Hook(线段树成段更新)

    Just a Hook Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  2. HDU 1698 Just a Hook (线段树 成段更新 lazy-tag思想)

    题目链接 题意: n个挂钩,q次询问,每个挂钩可能的值为1 2 3,  初始值为1,每次询问 把从x到Y区间内的值改变为z.求最后的总的值. 分析:用val记录这一个区间的值,val == -1表示这 ...

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

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

  4. hdu 4614 Vases and Flowers 线段树

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

  5. hdu 4747【线段树-成段更新】.cpp

    题意: 给出一个有n个数的数列,并定义mex(l, r)表示数列中第l个元素到第r个元素中第一个没有出现的最小非负整数. 求出这个数列中所有mex的值. 思路: 可以看出对于一个数列,mex(r, r ...

  6. HDU 3577 Fast Arrangement ( 线段树 成段更新 区间最值 区间最大覆盖次数 )

    线段树成段更新+区间最值. 注意某人的乘车区间是[a, b-1],因为他在b站就下车了. #include <cstdio> #include <cstring> #inclu ...

  7. ACM: Copying Data 线段树-成段更新-解题报告

    Copying Data Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Description W ...

  8. Codeforces Round #149 (Div. 2) E. XOR on Segment (线段树成段更新+二进制)

    题目链接:http://codeforces.com/problemset/problem/242/E 给你n个数,m个操作,操作1是查询l到r之间的和,操作2是将l到r之间的每个数xor与x. 这题 ...

  9. POJ 2777 Count Color (线段树成段更新+二进制思维)

    题目链接:http://poj.org/problem?id=2777 题意是有L个单位长的画板,T种颜色,O个操作.画板初始化为颜色1.操作C讲l到r单位之间的颜色变为c,操作P查询l到r单位之间的 ...

  10. HDU1698_Just a Hook(线段树/成段更新)

    解题报告 题意: 原本区间1到n都是1,区间成段改变成一个值,求最后区间1到n的和. 思路: 线段树成段更新,区间去和. #include <iostream> #include < ...

随机推荐

  1. HDU 4587 TWO NODES 割点

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4587 题意: 删除两个点,使连通块的数目最大化 题解: 枚举删除第一个点,然后对删除了第一个点的图跑 ...

  2. 【单调栈】Bzoj 1012: 最大数maxnumber

    1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 6255  Solved: 2676[Submi ...

  3. PAT-乙级-1055. 集体照 (25)

    1055. 集体照 (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 拍集体照时队形很重要,这里对给定的N ...

  4. spoj 274

    离散化   枚举行  扫描横坐标 #include <iostream> #include <cstdio> #include <cstring> #include ...

  5. 【C++之STL】理解容器(ing)

    “容器可容纳一些数据的模板类” “容器是包容其他对象的对象” 两种类型:顺序容器.关联容器   顺序容器 关联容器 访问成员 顺序访问和随机访问 经过优化关键键值访问                 ...

  6. JavaScript执行上下文

    变量声明.函数声明为何会提升?js执行时是如何查找变量的?JavaScript中最基本的部分——执行上下文(execution context) 什么是执行上下文? 当JavaScript代码运行,执 ...

  7. BZOJ 3720 gty的妹子树

    块状树裸题 块状树: 首先对树进行分块,分出的每一块都是一个连通块 通常的分块的方式如下: 1.父亲所在块不满,分到父亲所在块中 2.父亲所在块满,自己单独开一个块 (貌似有更为优越的分块方式? 注意 ...

  8. 欧拉工程第66题:Diophantine equation

    题目链接 脑补知识:佩尔方差 上面说的貌似很明白,最小的i,对应最小的解 然而我理解成,一个循环的解了,然后就是搞不对,后来,仔细看+手工推导发现了问题.i从0开始变量,知道第一个满足等式的解就是最小 ...

  9. Sina App Engine(SAE)入门教程(3)-KVDB使用

    简介 因为传统关系型数据库在分布式环境下表现的扩展性不足等缺点,近年来NoSQL的概念渐渐成为业界关注的焦点,越来越多的技术人员也习惯于使用NoSQL数据库进行日常开发,SAE为了应对这种新需求,也进 ...

  10. Orcle数据库查询练习复习:四

    一.题目 1.找出张三的最高分和最低分以及对应的课程名 select * from course c,mark m where c.cid=m.cid and sid =(select sid fro ...