#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. CentOS 6.4编译安装淘宝web服务器Tengine

    Tengine 是由淘宝核心系统部基于Nginx开发的Web服务器,它在Nginx的基础上,针对大访问量网站的需求,添加了很多功能和特性.Tengine的性能和稳定性已经在大型的网站如淘宝网,淘宝商城 ...

  2. CVPR2011录取结果

    CVPR2011论文录取已经结束了,虽然论文都还没有在线公布出来,不过相信http://www.cvpapers.com/会很快有的.这里大体看一下结果统计与分析: At the end of the ...

  3. bzoj1136: [POI2009]Arc

    Description 给定一个序列{ai | 1 <= ai <= 1000000000 且 1 <= i <= n 且 n <= 15000000}和一个整数 k ( ...

  4. gulp配置browserify多入口

    需要 var es = require('event-stream'); gulp.task('browserify', function(){ var files = [ { fpath: './j ...

  5. 一段JAVA签名算法的PHP改写

    源代码是这样的: public class AuthorizationSignature { public static String createSignature(String verb, Str ...

  6. No row with the given identifier exists[ArtProject.Domains.Users#2]

      产生此问题的原因:              有两张表,table1和table2. 产生此问题的原因就是table1里做了关联<one-to-one>或者<many-to-on ...

  7. id有空格获取不到元素

  8. 图论(二分图最大权独立点集):COGS 2051. 王者之剑

    2051. 王者之剑 ★★★☆   输入文件:Excalibur.in   输出文件:Excalibur.out   简单对比 时间限制:1 s   内存限制:256 MB [题目描述] 这是在阿尔托 ...

  9. oracle 表查询(1)

    oracle 表基本查询 介绍在我们讲解的过程中我们利用scott 用户存在的几张表(emp,dept)为大家演示如何使用select语句,select 语句在软件编程中非常有用,希望大家好好的掌握. ...

  10. Invert Binary Tree——LeetCode

    Invert a binary tree. 4 / \ 2 7 / \ / \ 1 3 6 9 to 4 / \ 7 2 / \ / \ 9 6 3 1 Trivia:This problem was ...