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

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

重新建图,分解询问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. eclipse 下找不到或无法加载主类的解决办法[转]

    转自:http://blog.sina.com.cn/s/blog_7ebc46500101gtff.html 有时候 Eclipse 会发神经,好端端的 project 就这么编译不了了,连 Hel ...

  2. CF Gym100548 K Last Defence 解题报告

    先特判掉特殊情况: $a=b,Ans=2$ $ab=0,a+b>0,Ans=2$ $a=b=0,Ans=1$ 考虑剩下的非特殊情况.记$Solve(a,b)$为数列中除了$a,b$外的不同的数的 ...

  3. DIV+CSS 基础

    盒子模型:margin(边界),可被占位:border(边框):padding(填充):content(内容) 块元素: 默认占据一行,前后换行. 作为容器,装载块元素和行内元素,被装载元素的位置,会 ...

  4. DC-DC升压(BOOST)电路原理

    BOOST升压电路中:      电感的作用:是将电能和磁场能相互转换的能量转换器件,当MOS开关管闭合后,电感将电能转换为磁场能储存起来,当MOS断开后电感将储存的磁场能转换为电场能,且这个能量在和 ...

  5. iOS开发中@selector的理解

    @selector 是什么? 1一种类型 SEL2代表你要发送的消息(方法), 跟字符串有点像, 也可以互转.: NSSelectorFromString() / NSSelectorFromStri ...

  6. Struts2 SSH整合框架返回json时,要注意懒加载问题

    返回的这个json对象,要保证它里面的所有属性都已经取出来了(即不是proxy或者是懒加载),否则当struts框架将该对象转化成json数据时,会报出一个no session的错误. 因此你要将该懒 ...

  7. sudo: /etc/sudoers 的模式为 0551,应为 0440

    环境:Ubuntu 12.04.4 LTS 32bit 本想修改/etc/sudoers文件,取消sudo权限的密码.但是因为sudoers文件无‘w’(写)的权限,然后用命令加写权限的时候加错了,加 ...

  8. lintcode 中等题 :Maximum Product Subarray 最大连续乘积子序列

    题目 乘积最大子序列 找出一个序列中乘积最大的连续子序列(至少包含一个数). 样例 比如, 序列 [2,3,-2,4] 中乘积最大的子序列为 [2,3] ,其乘积为6. 解题  法一:直接暴力求解 时 ...

  9. 【memcache缓存专题(3)】PHP-memcache扩展的安装以及使用

    安装PHP-memcache扩展和安装其他PHP扩展的步骤是一样的. 安装 step 1:搜索下载扩展 http://pecl.php.net/package/memcache step 2: gzi ...

  10. VCL ActiveX 播放视频

    播放网络视频 string[] options = new string[] { ":sout=#duplicate{dst=display} :no-overlay" }; st ...