好久没写线段树了。。被一道线段树裸题卡了一个上午

对区间进行异或,查询的时候直接用区间长度减去原有是数量就是改变完的数量

#include<bits/stdc++.h>
using namespace std;
#define maxn 100005
struct tree{
int l,r,sum;
}t[maxn*];
int n,m,ans;
int lazy[maxn*],a[maxn];
void add(int x,int l,int r){
lazy[x]^=;
t[x].sum=(r-l+)-t[x].sum;
}
void build(int x,int l,int r){
t[x].l=l;
t[x].r=r;
if(l==r){
return;
}
int mid=(l+r)>>;
build(x*,l,mid);
build(x*+,mid+,r);
}
void push(int x){
if(lazy[x]){
int mid=(t[x].l+t[x].r)>>;
add(x*,t[x].l,mid);add(x*+,mid+,t[x].r);
lazy[x]=;
}
}
int query(int x,int l,int r){
if(l<=t[x].l&&r>=t[x].r){
return t[x].sum;
}
if(l>t[x].r||r<t[x].l)
return ;
push(x);
return query(x*,l,r)+query(x*+,l,r);
}
void change(int x,int l,int r){
if(l<=t[x].l&&r>=t[x].r){
add(x,t[x].l,t[x].r);
return ;
}
if(l>t[x].r||r<t[x].l) return ;
push(x);
int mid=(t[x].l+t[x].r)>>;
change(x*,l,r);
change(x*+,l,r);
t[x].sum=t[x*].sum+t[x*+].sum;
}
int main(){
scanf("%d%d",&n,&m);
int x,y,z;
build(,,n);
for(int i=;i<=m;i++){
scanf("%d%d%d",&x,&y,&z);
if(x==){
ans=query(,y,z);
printf("%d\n",ans);
}
else {
change(,y,z);
/*printf("\n{");
for(int i=1;i<=7;i++){
cout<<t[i].sum<<" ";
}
printf("}\n");*/
}
} return ;
}

bzoj1230 开关灯 线段树的更多相关文章

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

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

  2. codevs 1690 开关灯 线段树+延迟标记

    1690 开关灯  时间限制: 1 s  空间限制: 128000 KB   题目描述 Description YYX家门前的街上有N(2<=N<=100000)盏路灯,在晚上六点之前,这 ...

  3. codevs 1690 开关灯 线段树区间更新 区间查询Lazy

    题目描述 Description YYX家门前的街上有N(2<=N<=100000)盏路灯,在晚上六点之前,这些路灯全是关着的,六点之后,会有M(2<=m<=100000)个人 ...

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

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

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

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

  6. 【codevs1690】开关灯 线段树

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

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

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

  8. codevs1690 开关灯(线段树)

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

  9. codevs 1690 开关灯 线段树水题

    没什么好说的,标记put表示开关是否开着. #include<cstdio> #include<cstring> #include<algorithm> using ...

随机推荐

  1. CBO基础概念

    CBO基础概念 CBO:评估 I/O,CPU,网络(DBLINK)等消耗的资源成本得出 一.cardinality cardinality:集合中包含的记录数.实际CBO评估目标SQL执行具体步骤的记 ...

  2. [原创]微信小程序 实现 圆环 百分百效果

    1.最终效果 2.技术点:a. css3 clip-path , b.根据角度和直边计算另一个直边的长度 3.实现思路: a.3个层(灰色圆形层, 红色圆形层,白色圆形层)  ,其中灰色和红色层大小一 ...

  3. MySQL内置函数uuid和uuid_short

    MySQL的uuid这个函数.简要介绍一下. 用法 简单看到,这个值,每次执行都是不同的. 生成规则 第1 2 3 段是与时间有关的. time_low.time_mid.time_high_and_ ...

  4. bioinformaitcs的latex版本参考文献填坑

    最近实验室投bioinfomatics的刊,编辑说要把参考文献的格式改成不带方括号的,而且加点,而且只保留前三作者,之后用et al. 折腾了一下午,终于弄出来了. 首先,导言区需要添加: \make ...

  5. 越努力越幸运--3-日常bug修复

    提供一个so给PYTHON调用,后端发现业务处理流程不是按照方法传入的参数来跑. 查看c的代码,看了客户端没看出什么问题,查看服务端为什么会出现这样的情况,有些字段明显不是入参带过来的,跟踪服务端解析 ...

  6. Vim配置及使用

    Vim配置 1.打开~/.vimrc,将以下内容考入文件.vimrc中 "行号" set nu "高亮" syntax enable syntax on &qu ...

  7. CAD二次开发(02)-添加对象到模型空间

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  8. [terry笔记]11gR2_dataguard_主备库切换

    主备库切换  Switchover  一般SWITCHOVER切换都是计划中的切换,特点是在切换后,不会丢失任何的数据,而且这个过程是可逆的,整个DATA GUARD环境不会被破坏,原来DATA GU ...

  9. 2015 Multi-University Training Contest 2 Friends

    Friends Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  10. Qt之pro配置多个子工程/子模块

    简述 进行Qt项目开发的时候,尤其是大型项目,经常涉及多工程/多模块问题,其主要思想还是模块化,目的是为了降低程序复杂度,使程序设计.调试和维护等操作简单化. 简述 配置 效果 多工程 多模块 更多参 ...