区间not,求区间1的个数。。。线段树裸题

然而窝并不会线段树

我们可以对序列分块,每个块记录0/1的个数和tag表示又没有区间not过就好了

 /**************************************************************
Problem: 1230
User: rausen
Language: C++
Result: Accepted
Time:796 ms
Memory:1608 kb
****************************************************************/ #include <cstdio>
#include <cmath>
#include <algorithm> using namespace std;
const int N = 1e5 + ;
const int SZ = ; int n, m;
int a[N];
int sz, b[N], st[SZ], cnt[SZ][], tag[SZ], cnt_block; inline int read() {
static int x;
static char ch;
x = , ch = getchar();
while (ch < '' || '' < ch)
ch = getchar();
while ('' <= ch && ch <= '') {
x = x * + ch - '';
ch = getchar();
}
return x;
} inline void pre() {
int i;
sz = sqrt(n);
if (!sz) sz = ;
for (i = ; i <= n; ++i) {
if (i % sz == || sz == ) st[++cnt_block] = i;
b[i] = cnt_block, ++cnt[cnt_block][];
}
st[cnt_block + ] = n + ;
} inline void push_tag(int B) {
static int i;
if (!tag[B]) return;
for (i = st[B]; i < st[B + ]; ++i)
a[i] = !a[i];
swap(cnt[B][], cnt[B][]);
tag[B] = ;
} inline void change(int x, int y) {
static int i, t1, t2;
t1 = b[x], t2 = b[y];
for (i = t1 + ; i < t2; ++i) tag[i] = !tag[i];
if (t1 == t2)
for (push_tag(t1), i = x; i <= y; ++i)
--cnt[t1][a[i]], a[i] = !a[i], ++cnt[t1][a[i]];
else {
for (push_tag(t1), i = x; i < st[t1 + ]; ++i)
--cnt[t1][a[i]], a[i] = !a[i], ++cnt[t1][a[i]];
for (push_tag(t2), i = st[t2]; i <= y; ++i)
--cnt[t2][a[i]], a[i] = !a[i], ++cnt[t2][a[i]];
}
} inline int query(int x, int y) {
static int i, t1, t2, res;
t1 = b[x], t2 = b[y], res = ;
for (i = t1 + ; i < t2; ++i)
res += cnt[i][!tag[i]];
if (t1 == t2)
for (push_tag(t1), i = x; i <= y; ++i) res += a[i];
else {
for (push_tag(t1), i = x; i < st[t1 + ]; ++i) res += a[i];
for (push_tag(t2), i = st[t2]; i <= y; ++i) res += a[i];
}
return res;
} int main() {
int i, oper, x, y;
n = read(), m = read();
pre();
for (i = ; i <= m; ++i) {
oper = read(), x = read(), y = read();
if (oper == ) change(x, y);
else printf("%d\n", query(x, y));
}
return ;
}

BZOJ1230 [Usaco2008 Nov]lites 开关灯的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. [Usaco2008 Nov]mixup2 混乱的奶牛 简单状压DP

    1231: [Usaco2008 Nov]mixup2 混乱的奶牛 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 685  Solved: 383[S ...

随机推荐

  1. NoSQL系列:选择合适的数据库

    NoSQL系列:选择合适的数据库 为什么使用NoSQL数据库? 阻抗失衡 关系模型和内存中的数据结构不匹配 采用更为方便的数据交互方式提升开发效率 待处理的数据量很大 数据量超过关系型数据库的承载能力 ...

  2. Linux命令工具基础02 文件及目录管理

    文件及目录管理 文件管理不外乎文件或目录的创建.删除.查询.移动,有mkdir/rm/mv 文件查询是重点,用find来进行查询:find的参数丰富,也非常强大: 查看文件内容是个大的话题,文本的处理 ...

  3. NoSql存储日志数据之Spring+Logback+Hbase深度集成

    NoSql存储日志数据之Spring+Logback+Hbase深度集成 关键词:nosql, spring logback, logback hbase appender 技术框架:spring-d ...

  4. iOS案例:读取指定目录下的文件列表

    // // main.m // 读取指定目录下的文件列表 // // Created by Apple on 15/11/24. // Copyright © 2015年 Apple. All rig ...

  5. SQL collate

    摘自:http://www.cnblogs.com/window5549-accp/archive/2009/10/03/1577682.html 我们在create table时经常会碰到这样的语句 ...

  6. bzoj 1588: [HNOI2002]营业额统计 treap

    1588: [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 13902  Solved: 5225[Submit][Sta ...

  7. FLASH CC 2015 CANVAS (六)如何像FLASH那样实现场景(多canvas)

    注意 此系列贴 为个人边“开荒”边写,所以不保证就是最佳做法,也难免有错误! 正式教程会在后续开始更新. swf 项目中,我们可以很容易在一个fla文档里创建多场景.也可以通过多个fla文件发布多个s ...

  8. Spring管理bean的生命周期

    1: bean的创建:   如果我们默认的scope配置为Singleton的话, bean的创建实在Spring容器创建的时候创建: 如果scope的配置为Prototype的话,bena的创建是在 ...

  9. asp.netMVC4(基础知识----传值问题分析)

    (1)一般在数据交互的时候,都会涉及到前后台间的相互传值,一般的情况下,方法也有多种,下面就后台定义变量往前台传值: 以下是后台代码: /// <summary> /// 展示举报信息 / ...

  10. linux软件下载及安装

    1.jdk安装以及下载地址      rpm.tar.gz格式下载   |   bin格式下载 官方bin格式下载   |    安装 2.centos安装phpstorm    戳我