Description

Farmer John尝试通过和奶牛们玩益智玩具来保持他的奶牛们思维敏捷. 其中一个大型玩具是牛栏中的灯. N (2 <= N <= 100,000) 头奶牛中的每一头被连续的编号为1..N, 站在一个彩色的灯下面.刚到傍晚的时候, 所有的灯都是关闭的. 奶牛们通过N个按钮来控制灯的开关; 按第i个按钮可以改变第i个灯的状态.奶牛们执行M (1 <= M <= 100,000)条指令, 每个指令都是两个整数中的一个(0 <= 指令号 <= 1). 第1种指令(用0表示)包含两个数字S_i和E_i (1 <= S_i <= E_i <= N), 它们表示起始开关和终止开关. 奶牛们只需要把从S_i到E_i之间的按钮都按一次, 就可以完成这个指令. 第2种指令(用1表示)同样包含两个数字S_i和E_i (1 <= S_i <= E_i <= N), 不过这种指令是询问从S_i到E_i之间的灯有多少是亮着的. 帮助FJ确保他的奶牛们可以得到正确的答案.

Input

* 第 1 行: 用空格隔开的两个整数N和M

* 第 2..M+1 行: 每行表示一个操作, 有三个用空格分开的整数: 指令号, S_i 和 E_i

Output

第 1..询问的次数 行: 对于每一次询问, 输出询问的结果.

Sample Input

4 5
0 1 2
0 2 4
1 2 3
0 2 4
1 1 4

Sample Output

1
2
 
 
 
 
 
好久没写标记了……水题不解释……
 
#include<cstdio>
#include<algorithm>
using namespace std;
struct tree{
int l,r,m;
bool f;
}t[];
int n,m,c,l,r,ra,an[];
char rx;
inline int read(){
rx=getchar();ra=;
while(rx<''||rx>'') rx=getchar();
while(rx>=''&&rx<='') ra=ra*+rx-,rx=getchar();return ra;
}
inline void pr(int t){
if (!t) putchar('');else{
for (an[]=;t;t/=){
an[]++;
an[an[]]=t%;
}
while(an[]--) putchar(an[an[]+]+);
}
putchar('\n');
}
inline void hb(int x){
t[x].f^=;
}
inline void xc(int x){
if (t[x].f){
t[x].m=t[x].r-t[x].l+-t[x].m;
t[x].f=;
if (t[x].l<t[x].r) hb((x<<)),hb((x<<)|);
}
}
inline int qu(int x,int l,int r){
xc(x);
if (t[x].l==l&&t[x].r==r) return t[x].m;
int mid=(t[x].l+t[x].r)>>;
if (r<=mid) return qu((x<<),l,r);else
if (l>mid) return qu((x<<)|,l,r);else return qu((x<<),l,mid)+qu((x<<)|,mid+,r);
}
inline void change(int x,int l,int r){
xc(x);
if (t[x].l==l&&t[x].r==r){
t[x].f=;
return;
}
int mid=(t[x].l+t[x].r)>>;
if (r<=mid) change((x<<),l,r);else
if (l>mid) change((x<<)|,l,r);else change((x<<),l,mid),change((x<<)|,mid+,r);
xc(x<<);xc((x<<)|);
t[x].m=t[x<<].m+t[(x<<)|].m;
}
inline void build(int x,int l,int r){
t[x].l=l;t[x].r=r;t[x].f=t[x].m=;
if (l==r) return;
int mid=(l+r)>>;
build(x<<,l,mid);
build((x<<)|,mid+,r);
}
int main(){
n=read();m=read();
build(,,n);
while (m--){
c=read();l=read();r=read();
if (!c){
change(,l,r);
}else{
pr(qu(,l,r));
}
}
}

bzoj:1230: [Usaco2008 Nov]lites 开关灯的更多相关文章

  1. BZOJ 1230: [Usaco2008 Nov]lites 开关灯( 线段树 )

    线段树.. --------------------------------------------------------------------------------- #include< ...

  2. BZOJ 1230 [Usaco2008 Nov]lites 开关灯:线段树异或

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1230 题意: 有n盏灯,一开始全是关着的. 有m次操作(p,a,b).p为0,则将区间[a ...

  3. bzoj 1230: [Usaco2008 Nov]lites 开关灯【线段树】

    在线段树上记录长度.区间01翻转标记.当前1个数.传递tag的时候用长度-1个数即可 #include<iostream> #include<cstdio> using nam ...

  4. 1230: [Usaco2008 Nov]lites 开关灯

    1230: [Usaco2008 Nov]lites 开关灯 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1162  Solved: 589[Sub ...

  5. BZOJ 1230 Usaco2008 Nov 开关灯

    [题意概述] 给出一个01序列,初始时序列全为0,每次有修改操作或询问操作,修改操作要求把L~R区间中的0变成1,1变成0,查询操作要求输出L~R区间的1的个数 [题解] 线段树. 每次区间修改把区间 ...

  6. BZOJ 1230 Usaco2008 Nov 开关灯 线段树

    思路: 用线段树模拟题中的操作就好 (标记异或 长度=区间总长度-当前已开灯的长度) //By SiriusRen #include <cstdio> using namespace st ...

  7. BZOJ1230 [Usaco2008 Nov]lites 开关灯

    区间not,求区间1的个数...线段树裸题 然而窝并不会线段树 我们可以对序列分块,每个块记录0/1的个数和tag表示又没有区间not过就好了 /*************************** ...

  8. P1230: [Usaco2008 Nov]lites 开关灯

    嗯嗯,这是一道线段树的题,询问区间内亮着的灯的个数,我们可以把区间修改的线段树改一下,原本的求和改成若有奇数次更改则取反(总长度-亮着的灯个数),而判断是否奇数次只要数组加一个delta的值,upda ...

  9. 【线段树】Bzoj1230 [Usaco2008 Nov]lites 开关灯

    Description Farmer John尝试通过和奶牛们玩益智玩具来保持他的奶牛们思维敏捷. 其中一个大型玩具是牛栏中的灯. N (2 <= N <= 100,000) 头奶牛中的每 ...

随机推荐

  1. MySQL时间操作的系统函数用法

    我要查询获得当天凌晨30分的datetime值的方式:select ADDDATE(CURDATE(), INTERVAL TIME_TO_SEC(TIMEDIFF("00:30:00&qu ...

  2. 动态WebApi

    动态WebApi实现了直接对Service的调用,其实没有跨过ApiController,只是我们自己创建出ApiController 实现主要分以下几步 一 对默认WebApi服务的替换 ApiGl ...

  3. jQuery模块化开发

    //定义了命名空间. var Itcast = {}; //定义第二级别的 命名空间. var Itcast.Model = {}; var Itcast.Model.UIJs = (function ...

  4. webpack配置报错:invalid configuration object.webpack has been initialisted using a configuration objcet that does not match thie API schema

    最近接收了别人的项目,webpack配置总是报错如下:最后找到了解决办法,在此分享一下: 错误情况: 解决办法: 将package.json里面的colors删除掉即可

  5. PHP使用ueditor上传配置

    引入 按照ueditor官网demo, 引入好ueditor之后, 默认是不能进行上传操作的 在上传时,在上传时会有如下图提示 配置上传 在editor/php目录下,有一个config.json文件 ...

  6. thinkinginjava学习笔记02_对象

    对象 1. 对象通过一个引用来操作,但是java中的对象是按值传递的,基本上可以在操作中认为对象本身,在内部结构中仍然要记得是对象实体的引用:如:String s = "abcd" ...

  7. UWP 手绘视频创作工具技术分享系列 - Ink & Surface Dial

    本篇作为技术分享系列的第四篇,详细讲一下手绘视频中 Surface Pen 和 Surface Dial 的使用场景. 先放一张微软官方商城的图,Surface 的使用中结合了 Surface Pen ...

  8. Robot Framework学习笔记(十)------Selenium2Library库

    一.安装selenium2library库 如果已经安装了pip,则使用管理员模式打开windows命令行,输入pip install robotframework-selenium2library, ...

  9. ubuntu搭建 zabbix3.2 with mysql database (Ubuntu 14.04.5 LTS)

    官网文档 服务构建:https://www.zabbix.com/documentation/3.2/manual/installation/install_from_packages/server_ ...

  10. 记一次Hbase查询速度优化经历

    项目背景: 在这次影像系统中,我们利用大数据平台做的是文件(图片.视频等)批次的增删改查,每个批次都包含多个文件,上传完成以后要添加文件索引(文件信息及批次信息),由于在Hbase存储的过程中,每个文 ...