题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1230

题意:

  有n盏灯,一开始全是关着的。

  有m次操作(p,a,b)。p为0,则将区间[a,b]内的所有灯反转;p为1,则输出[a,b]中有多少盏灯是亮的。

题解:

  线段树区间异或。

  与一般线段树有两点不同:

    (1)更新lazy时为:lazy ^= 1

    (2)更新dat时为:dat = len - dat

AC Code:

 #include <iostream>
#include <stdio.h>
#include <string.h>
#define MAX_N 500005
#define INF 10000000 using namespace std; int n,m;
int tot;
int dat[MAX_N];
int lazy[MAX_N];
int lson[MAX_N];
int rson[MAX_N]; void init_segment()
{
tot=;
memset(dat,,sizeof(dat));
memset(lazy,,sizeof(lazy));
memset(lson,-,sizeof(lson));
memset(rson,-,sizeof(rson));
} void create_kid(int now)
{
if(lson[now]==-) lson[now]=tot++;
if(rson[now]==-) rson[now]=tot++;
} void push_down(int now,int len)
{
if(lazy[now])
{
dat[lson[now]]=len-(len>>)-dat[lson[now]];
dat[rson[now]]=(len>>)-dat[rson[now]];
lazy[lson[now]]^=lazy[now];
lazy[rson[now]]^=lazy[now];
lazy[now]=;
}
} void push_up(int now)
{
dat[now]=dat[lson[now]]+dat[rson[now]];
} void update(int a,int b,int k,int l,int r,int x)
{
if(a<=l && r<=b)
{
dat[k]=r-l+-dat[k];
lazy[k]^=x;
return;
}
if(r<a || b<l) return;
create_kid(k);
push_down(k,r-l+);
int mid=(l+r)>>;
update(a,b,lson[k],l,mid,x);
update(a,b,rson[k],mid+,r,x);
push_up(k);
} void query(int a,int b,int k,int l,int r,int &sum)
{
if(a<=l && r<=b)
{
sum+=dat[k];
return;
}
if(r<a || b<l) return;
create_kid(k);
push_down(k,r-l+);
int mid=(l+r)>>;
query(a,b,lson[k],l,mid,sum);
query(a,b,rson[k],mid+,r,sum);
} int main()
{
init_segment();
scanf("%d%d",&n,&m);
int p,a,b;
for(int i=;i<m;i++)
{
scanf("%d%d%d",&p,&a,&b);
if(p==) update(a,b,,,n,);
else
{
int sum=;
query(a,b,,,n,sum);
printf("%d\n",sum);
}
}
}

BZOJ 1230 [Usaco2008 Nov]lites 开关灯:线段树异或的更多相关文章

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

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

  2. B1230 [Usaco2008 Nov]lites 开关灯 线段树

    就是线段树维护异或和.之前我线段树区间修改down都是修改当前区间,结果debug出不来,改成每次向下了. 题干: Description Farmer John尝试通过和奶牛们玩益智玩具来保持他的奶 ...

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

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

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

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

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

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

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

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

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

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

  8. BZOJ 1230 Usaco2008 Nov 开关灯

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

  9. BZOJ1230 [Usaco2008 Nov]lites 开关灯

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

随机推荐

  1. mysql rpm安装,以及修改charset

    http://my.oschina.net/u/1156660/blog/343154?fromerr=tmDGGiDL 修改charset: http://stackoverflow.com/que ...

  2. Python 的下载安装

    学习Python牛逼的教程: http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000,本文 ...

  3. iOS 一些struct类型的NSLog输出

    我们经常会输出一些坐标尺寸信息之类的,比如view的frame,是CGRect类型的,用frame.oringial.x 和frame.size.width来做NSLog参数好麻烦,还好苹果对这些常用 ...

  4. Lua学习二----------Lua的基本语法

    © 版权声明:本文为博主原创文章,转载请注明出处 Lua基本语法: 1.--表示单行注释 2.--[[--]]表示多行注释 3.Lua区分大小写 4.Lua中变量默认是全局变量,除非用local显式声 ...

  5. 栈(C++)

    简介: 限定仅在表尾进行插入或删除操作的线性表 表尾端称为栈顶(top),表头端称为栈底(bottom) 特点: 在栈中,后入栈的元素先出栈 C语言版本 用于测试的文件,以及测试结果可以去作者GitH ...

  6. 【selenium+Python WebDriver API】之复选框顺序正选和顺序反选

    from selenium import webdriver from selenium.webdriver.common.by import By import os,time driver = w ...

  7. 重新编译Nginx指导手册【修复静态编译Openssl的Nginx漏洞 】(转)

    1. 概述    当前爆出了Openssl漏洞,会泄露隐私信息,涉及的机器较多,环境迥异,导致修复方案都有所不同.不少服务器使用的Nginx,是静态编译opensssl,直接将openssl编译到ng ...

  8. nginx配置1:借助Nginx搭建反向代理服务器与缓存静态文件

    修改配置文件nginx.conf (1)进程数与每个进程的最大连接数: •nginx进程数,建议设置为等于CPU总核心数 •单个进程最大连接数,那么该服务器的最大连接数=连接数*进程数 (2)Ngin ...

  9. react build和server start

    先到项目目录build项目 npm run build 项目会打包到dist文件夹下 index.html和index.js等 react的项目build后不能直接访问的问题 先执行 npm inst ...

  10. [Android基础]Android中使用HttpURLConnection

    HttpURLConnection继承了URLConnection,因此也能够向指定站点发送GET请求.POST请求.它在URLConnetion的基础上提供了例如以下便捷的方法. int getRe ...