BZOJ 1230 Usaco2008 Nov 开关灯
【题意概述】
给出一个01序列,初始时序列全为0,每次有修改操作或询问操作,修改操作要求把L~R区间中的0变成1,1变成0,查询操作要求输出L~R区间的1的个数
【题解】
线段树。
每次区间修改把区间的$sum$改为$len-sum$即可。
#include<cstdio>
#include<algorithm>
#define ls (cur<<1)
#define rs (cur<<1|1)
#define len(x) (a[x].r-a[x].l+1)
#define mid ((a[cur].l+a[cur].r)>>1)
using namespace std;
const int maxn=400010;
int n,m,x,y,z;
struct tree{int l,r,sum,c;}a[maxn];
void read(int &k){
k=0; int f=1; char c=getchar();
while (c<'0'||c>'9')c=='-'&&(f=-1),c=getchar();
while ('0'<=c&&c<='9')k=k*10+c-'0',c=getchar();
k*=f;
}
void build(int cur,int l,int r){
a[cur].l=l; a[cur].r=r;
if (l<r) build(ls,l,mid),build(rs,mid+1,r);
}
void pushdown(int cur){
if (len(cur)==0||a[cur].c==0) return;
a[ls].c=1-a[ls].c; a[ls].sum=len(ls)-a[ls].sum;
a[rs].c=1-a[rs].c; a[rs].sum=len(rs)-a[rs].sum;
a[cur].c=0;
}
void update(int cur,int l,int r){
if (l<=a[cur].l&&a[cur].r<=r) a[cur].c=1-a[cur].c,a[cur].sum=len(cur)-a[cur].sum;
else{
pushdown(cur);
if (l<=mid) update(ls,l,r);
if (r>mid) update(rs,l,r);
a[cur].sum=a[ls].sum+a[rs].sum;
}
}
int query(int cur,int l,int r){
if (l<=a[cur].l&&a[cur].r<=r) return a[cur].sum;
else{
pushdown(cur); int ret=0;
if (l<=mid) ret+=query(ls,l,r);
if (r>mid) ret+=query(rs,l,r);
return ret;
}
}
int main(){
read(n); read(m); build(1,1,n);
for (int i=1;i<=m;i++){
read(x); read(y); read(z);
if (x==0) update(1,y,z);
else printf("%d\n",query(1,y,z));
}
return 0;
}
BZOJ 1230 Usaco2008 Nov 开关灯的更多相关文章
- BZOJ 1230 Usaco2008 Nov 开关灯 线段树
思路: 用线段树模拟题中的操作就好 (标记异或 长度=区间总长度-当前已开灯的长度) //By SiriusRen #include <cstdio> using namespace st ...
- BZOJ 1230: [Usaco2008 Nov]lites 开关灯( 线段树 )
线段树.. --------------------------------------------------------------------------------- #include< ...
- BZOJ 1230 [Usaco2008 Nov]lites 开关灯:线段树异或
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1230 题意: 有n盏灯,一开始全是关着的. 有m次操作(p,a,b).p为0,则将区间[a ...
- bzoj:1230: [Usaco2008 Nov]lites 开关灯
Description Farmer John尝试通过和奶牛们玩益智玩具来保持他的奶牛们思维敏捷. 其中一个大型玩具是牛栏中的灯. N (2 <= N <= 100,000) 头奶牛中的每 ...
- bzoj 1230: [Usaco2008 Nov]lites 开关灯【线段树】
在线段树上记录长度.区间01翻转标记.当前1个数.传递tag的时候用长度-1个数即可 #include<iostream> #include<cstdio> using nam ...
- 1230: [Usaco2008 Nov]lites 开关灯
1230: [Usaco2008 Nov]lites 开关灯 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1162 Solved: 589[Sub ...
- BZOJ 1229: [USACO2008 Nov]toy 玩具
BZOJ 1229: [USACO2008 Nov]toy 玩具 标签(空格分隔): OI-BZOJ OI-三分 OI-双端队列 OI-贪心 Time Limit: 10 Sec Memory Lim ...
- BZOJ 1620: [Usaco2008 Nov]Time Management 时间管理( 二分答案 )
二分一下答案就好了... --------------------------------------------------------------------------------------- ...
- BZOJ 1231: [Usaco2008 Nov]mixup2 混乱的奶牛( dp )
状压dp dp( x , S ) 表示最后一个是 x , 当前选的奶牛集合为 S , 则状态转移方程 : dp( x , S ) = Σ dp( i , S - { i } ) ( i ∈ S , ...
随机推荐
- java 多线程——同步 学习笔记
一.实例的同步方法 public synchronized void add(int value){ this.count += value; } Java 实例方法同步是同步在拥有该方法的对象上 ...
- Linux设备驱动模型【转】
本文转载自:http://blog.csdn.net/xiahouzuoxin/article/details/8943863 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+ ...
- java问题解读,String类为什么是final的
一.理解final 望文生义,final意为“最终的,最后的”,我理解为“不能被改变的”,它可以修饰类.变量和方法. 所以我是否可以理解为被它所修饰的类.变量和方法都不能被改变呢?答案是”是“,因为有 ...
- PL/SQL程序控制结构及在PL/SQL中更改数据和管理事务
1.条件控制 A. IF条件分支语法: if (条件1) then 语句; elsif (条件2) then 语句; elsif (条件3) then 语句; else 语句; end if; B . ...
- idea 内测设置
找到安装目录/bin/idea64.exe.vmoptions文件 下面是默认配置 -Xms128m -Xmx750m -XX:ReservedCodeCacheSize=240m -XX:+UseC ...
- mysql 数据去重
update ptop_investrecord set delflag = 1 where cid = 250 and uid = 92569 and delflag = 0 and progr ...
- linux 查看内存和cpu
Linux查看CPU和内存使用情况 在系统维护的过程中,随时可能有需要查看 CPU 使用率,并根据相应信息分析系统状况的需要.在 CentOS 中,可以通过 top 命令来查看 CPU 使用状况.运行 ...
- C# Nugut CsvHelper 使用
装载自: 跳转链接>>>
- InnoDB锁机制之Gap Lock、Next-Key Lock、Record Lock解析
InnoDB锁机制之Gap Lock.Next-Key Lock.Record Lock解析 有意思,解释的很好
- Jquery 可拖拽的Ztree
比较懒,就只贴关键代码吧,自己把有用的属性全部打印出来了,也加了不少注释. 保存后涉及到的排序问题,刷新问题还未考虑到,后面有的话再加. $.fn.zTree.init($("#ztree& ...