#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#define maxn 100010
using namespace std;
int n,m,num;
struct node
{
int lc,rc;
int l,r;
int sum,bj;
}t[maxn*+];
void Build(int ll,int rr)
{
int k=++num;
t[k].l=ll;t[k].r=rr;
if(ll==rr)return;
t[k].lc=num+;
Build(ll,(ll+rr)/);
t[k].rc=num+;
Build((ll+rr)/+,rr);
}
void update(int k)
{
t[t[k].lc].sum=abs(t[t[k].lc].r-t[t[k].lc].l+-t[t[k].lc].sum);
t[t[k].rc].sum=abs(t[t[k].rc].r-t[t[k].rc].l+-t[t[k].rc].sum);
t[t[k].lc].bj=!t[t[k].lc].bj;
t[t[k].rc].bj=!t[t[k].rc].bj;
t[k].bj=;
}
void change(int k,int ll,int rr)
{
if(ll<=t[k].l&&rr>=t[k].r)
{
t[k].bj=!t[k].bj;
t[k].sum=abs(t[k].r-t[k].l+-t[k].sum);
return;
}
if(t[k].bj)update(k);
int mid=(t[k].l+t[k].r)/;
if(rr<=mid)change(t[k].lc,ll,rr);
else if(ll>mid)change(t[k].rc,ll,rr);
else
{
change(t[k].lc,ll,mid);
change(t[k].rc,mid+,rr);
}
t[k].sum=t[t[k].lc].sum+t[t[k].rc].sum;
}
int find(int k,int ll,int rr)
{
if(ll<=t[k].l&&rr>=t[k].r)return t[k].sum;
if(t[k].bj)update(k);
int ans=;
int mid=(t[k].l+t[k].r)/;
if(rr<=mid)ans+=find(t[k].lc,ll,rr);
else if(ll>mid)ans+=find(t[k].rc,ll,rr);
else ans+=find(t[k].lc,ll,mid)+find(t[k].rc,mid+,rr);
return ans;
}
int main()
{
scanf("%d",&n);
Build(,n);
scanf("%d",&m);
int x,y,z;
for(int i=;i<=m;i++)
{
scanf("%d",&x);
if(x==)
{
scanf("%d%d",&y,&z);
change(,y,z);
}
if(x==)
{
scanf("%d%d",&y,&z);
printf("%d\n",find(,y,z));
}
}
return ;
}

codevs1690开关灯的更多相关文章

  1. codevs1690 开关灯

    1690 开关灯 USACO  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Description YYX家门前的街上有N( ...

  2. codevs1690 开关灯(线段树)

    1690 开关灯 USACO  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond     题目描述 Description YYX家门前的街上有N(2< ...

  3. 【codevs1690】开关灯 线段树 区间修改+区间求和(标记)

    [codevs1690]开关灯 2014年2月15日4930 题目描述 Description YYX家门前的街上有N(2<=N<=100000)盏路灯,在晚上六点之前,这些路灯全是关着的 ...

  4. 【codevs1690】开关灯 (线段树 区间修改+区间求和 (标记))

    [codevs1690]开关灯 2014年2月15日4930 题目描述 Description YYX家门前的街上有N(2<=N<=100000)盏路灯,在晚上六点之前,这些路灯全是关着的 ...

  5. 【codevs1690】开关灯 线段树

    这道题需要支持区间修改和区间询问,因此采用线段树加以维护. 由于求的是开着的灯的数目,因此维护sum:区间[ l , r ]中开着的灯的数目. tag取做0/1,表示区间是否反转,在进行标记下传时,如 ...

  6. Code[VS]1690 开关灯 题解

    Code[VS]1690 开关灯 题解     时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond   题目描述 Description:     YYX家门前 ...

  7. ckplayer播放器去掉右边的开关灯分享插件

    在上一篇文章中介绍了如何使用ckplayer播放器,但是有的人不需要CK播放器右边的开关灯分享插件,那么就需要把该插件给去掉,方法也很简单. 第一步:先打开ckplayer.js里找到下面三行删除掉 ...

  8. 【wikioi】1690 开关灯(线段树)

    http://wikioi.com/problem/1690/ 这题可不能算是水题了.. 在线段树中,我只想到了lazy改变,但是没想到lazy变后size怎么变,我的策略变成了lazy为0时size ...

  9. Codevs 1690 开关灯 USACO

    1690 开关灯 USACO 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description YYX家门前的街上有N(2<=N& ...

随机推荐

  1. C语言陷阱——类型转换

    以下例子取自<深入理解计算机系统>. 考虑如下的C语言代码: #include<stdio.h> typedef unsigned char* byte_pointer; vo ...

  2. MAC OSX使用篇

    前述: 从windows平台切换到osx平台,的确没能一下子适应过来,在使用过程当中遇到了很多问题. link1:osx卸载应用程序的四种方法 link2:(推荐看)开始使用Mac OS X——写给M ...

  3. 转 四大Java EE容器(Tomcat、JBoss、Resin、Glassfish)之简单比较

                                      现在流行的Java EE容器有很多:Tomcat.JBoss.Resin.Glassfish等等.下面对这四种Java EE容器进行 ...

  4. mapreduce (七) 几个实例

    http://hi.baidu.com/hzd2712/item/d2465ae65270ab3e4cdcaf55 MapReduce几个典型的例子 在Google的<MapReduce: Si ...

  5. [BZOJ 1066] [SCOI2007] 蜥蜴 【最大流】

    题目链接:BZOJ - 1066 题目分析 题目限制了高度为 x 的石柱最多可以有 x 只蜥蜴从上面跳起,那么就可以用网络流中的边的容量来限制.我们把每个石柱看作一个点,每个点拆成 i1, i2,从 ...

  6. 如何给Qlabel添加clicked属性(覆盖mousePressEvent,处理QMouseEvent消息,反正是软绘制,想怎么样就怎么样)

    clickedLabel.h #ifndef CLICKLABEL_H #define CLICKLABEL_H #include <QLabel> #include <QMouse ...

  7. 【HDOJ】1903 Exchange Rates

    水DP.精度很坑. /* hdoj 1903 */ #include <cstdio> #include <cstring> #include <cstdlib> ...

  8. java学习之运算符

    学习完了变量+常量,现在只能简单的声明变量+赋值+打印变量. 但是程序要做的就是去处理数据,把原本散乱的数据,处理成有意义的数据,供我们来使用,这就涉及到了运算符的应用. 算数运算符常用的种类: 加法 ...

  9. centos qt5,PyQt5 installation

    一.SIP http://www.riverbankcomputing.com/software/sip/download   二.Centos6.5 qt 安装 1,centos linux系统必须 ...

  10. 【转】Android驱动开发之earlysuspend睡眠模式编程总结

    原文网址:http://blog.csdn.net/bigapple88/article/details/8669537 (1)添加头文件: #include <linux/earlysuspe ...