codevs 1690 开关灯 线段树水题
没什么好说的,标记put表示开关是否开着。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=;
int sum[N<<];
bool put[N<<];
void pushdown(int l,int r,int rt)
{
if (put[rt])
{
put[rt]=;
put[rt<<]=!put[rt<<];
put[rt<<|]=!put[rt<<|];
int mid=(l+r)>>;
sum[rt<<]=mid-l+-sum[rt<<];
sum[rt<<|]=r-mid-sum[rt<<|];
}
}
void add(int L,int R,int l,int r,int rt)
{
if (L<=l&&r<=R)
{
sum[rt]=r-l+-sum[rt];
put[rt]=!put[rt];
return;
}
int mid=(l+r)>>;
pushdown(l,r,rt);
if (L<=mid) add(L,R,l,mid,rt<<);
if (R>mid) add(L,R,mid+,r,rt<<|);
sum[rt]=sum[rt<<]+sum[rt<<|];
}
int quest(int L,int R,int l,int r,int rt)
{
if (L<=l&&r<=R)
return sum[rt];
int mid=(l+r)>>,ans=;
pushdown(l,r,rt);
if (L<=mid) ans+=quest(L,R,l,mid,rt<<);
if (R>mid) ans+=quest(L,R,mid+,r,rt<<|);
return ans;
}
int main()
{
int i,n,m,x,y,z;
scanf("%d %d\n",&n,&m);
memset(sum,,sizeof(sum));
memset(put,,sizeof(put));
for (i=;i<=m;++i)
{
scanf("%d %d %d\n",&x,&y,&z);
if (x==) add(y,z,,n,);
else printf("%d\n",quest(y,z,,n,));
}
return ;
}
这样就可以了。
codevs 1690 开关灯 线段树水题的更多相关文章
- codevs 1690 开关灯 线段树+延迟标记
1690 开关灯 时间限制: 1 s 空间限制: 128000 KB 题目描述 Description YYX家门前的街上有N(2<=N<=100000)盏路灯,在晚上六点之前,这 ...
- codevs 1690 开关灯 线段树区间更新 区间查询Lazy
题目描述 Description YYX家门前的街上有N(2<=N<=100000)盏路灯,在晚上六点之前,这些路灯全是关着的,六点之后,会有M(2<=m<=100000)个人 ...
- POJ 3468 A Simple Problem with Integers(线段树水题)
A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 135904 ...
- hdu 1754 I Hate It(线段树水题)
>>点击进入原题测试<< 思路:线段树水题,可以手敲 #include<string> #include<iostream> #include<a ...
- 【wikioi】1191 数轴染色(线段树+水题)
http://wikioi.com/problem/1191/ 太水的线段树了,敲了10分钟就敲完了,但是听说还有一种并查集的做法?不明觉厉. #include <cstdio> #inc ...
- codeforces 339C Xenia and Bit Operations(线段树水题)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Xenia and Bit Operations Xenia the beginn ...
- P1198 最大数 线段树水题
这道题模拟一下可以过,但是我们发现线段树也可以安全水过...... 写的线段树只需要滋磁单点修改,区间求max即可 我一开始犯了一个很SB的错误:每次插入修改了t,然后疯狂爆0到怀疑人生... 而且我 ...
- hdu - 1394 Minimum Inversion Number(线段树水题)
http://acm.hdu.edu.cn/showproblem.php?pid=1394 很基础的线段树. 先查询在更新,如果后面的数比前面的数小肯定会查询到前面已经更新过的值,这时候返回的sum ...
- [ACM_数据结构] Color the ball [线段树水题][数组开大]
Description N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽"牌电动车从气球a开始到气球b依次 ...
随机推荐
- NOIP2008提高组火柴棒等式(模拟)——yhx
题目描述 给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A.B.C是用火柴棍拼出的整数(若该数非零,则最高位不能是0).用火柴棍拼数字0-9的拼法如图所示: 注意: 加号与等号各自 ...
- shell script 学习笔记-----shell变量
1.在赋值语句name=value中不能存在空格,例如:name = value这样的形式会被认为是三个变量,因为本质上来说,脚本的内容就是传给shell程序的变量,而变量之间是通过空格区分的.如果想 ...
- 线性代数与MATALB1
1图论的一个基本应用 下图描述了4个城市之间的航空航线图, 为了描述着4个城市之间航线的邻接关系,定义邻接矩阵 第i行描述从城市i出发,可以达到各个城市的情况, 可以证明,矩阵A^N表示一个人连续坐N ...
- JavaWeb学习----JSP内置对象详解
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- 什么是Activity
Activity 的生命周期是被以下的函数控制的.public class Activity extends ApplicationContext { protected void onCr ...
- find命令错误提示路径必须在表达式之前
在某些版本的linux下,通过find查找当前目录下所有后缀名jpg的文件,命令为find ./ -iname *.jpg 会出现“find: 路径必须在表达式之前”的错误提示.解决的方法有两种 a. ...
- iOS math.h数学函数
在实际工作中有些程序不可避免的需要使用数学函数进行计算,比如地图程序的地理坐标到地图坐标的变换.Objective-C做为ANSI C的扩展,使用C标准库头文件<math.h>中定义的数学 ...
- XCode的 Stack Trace,调试时抛出异常,定位到某一行代码
在Xcode调试程序的时候,总是会出现不知道错误在什么地方的问题,很是捉急,现在又一个办法,可以具体定位到错误行的代码,试一下吧?超级好用 操作很简单: 1.在XCode界面中按cmd + 6快捷键, ...
- MySQL 约束的讲解
MySQL 约束 作用:保证数据的完整性和一致性按照约束的作用范围分为:表级约束和行级约束.常见的约束类型包括: Not null(非空约束) Primary key (主键约束) Unique ke ...
- DWZ (JUI) 教程 navTab 刷新分析
navTab的刷新在doc文件里也有说明 首先 在form表单里指定好回调函数 * <form action="/user.do?method=save" onsubmit= ...