区间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. yii CDbCriteria 类的总结

    在编程中,我们通常会需要查询些东西,但是通过查询的时候,yii有个集成的类--- CDbCriteria():通过该类,我们可以更加便捷的调用数据. 参考网址:http://www.cnblogs.c ...

  2. 百度之星Astar2016 Round2A

    All X 等比数列求和一下 A/B MOD C = A MOD (B*C) / B  或者分治一下 Sitting in Line 状压+拓扑dp dp(i, j)表示当前二进制状态为j,当前状态的 ...

  3. Android手机分辨率基础知识(DPI,DIP计算)三

    获得屏幕分辨率和密度,尺寸的代码片段 DisplayMetrics displayMetrics = new DisplayMetrics();getWindowManager().getDefaul ...

  4. [转载]java中try 与catch的使用

    留着以后看 原文地址:与catch的使用">java中try 与catch的使用作者:碌碌如玉 try{ //代码区 }catch(Exception e){ //异常处理 } 代码区 ...

  5. Alpha

    100% — FF95% — F290% — E685% — D980% — CC75% — BF70% — B365% — A660% — 9955% — 8C50% — 8045% — 7340% ...

  6. 【转】Android设置虚线、圆角、渐变

      Android虚线圆角渐变 有图又真相,先上图再说. 点击效果: 设置虚线: <?xml version="1.0" encoding="utf-8" ...

  7. 判断手机连接的是fdd还是tdd的办法

    判断手机连接的是fdd还是tdd的办法http://bbs.ydss.cn/thread-550035-1-1.html移动4G一般都是tdd,联通则可能有tdd,还有可能是fdd,判断手机连接的是t ...

  8. java 集合(Map)

    -------------------|Map  储存的数据都是以键值对的形式,键不可重复,值可重复. ----------------------------| HashMap ---------- ...

  9. android优化从网络中加载图片速度。。

    从网络中加载图片主要要注意两个方面的问题: 1.内存管理:图片占的内存很大,假如图片数量多,很容易让系统抛出out of memory的异常. 同时我们也要注意不同android版本中内存管理的区别. ...

  10. Mybatis学习(叁)

    一.resultMap[结果映射  关系映射] 作用:当查询的数据与数据库中的数据不一致(表中字段和实体的属性不一样),通过resultMap进行一次映射. 可以使用简单的做法:(取别名) 二.多表查 ...