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

然而窝并不会线段树

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

 1 /**************************************************************
 2     Problem: 1230
 3     User: rausen
 4     Language: C++
 5     Result: Accepted
 6     Time:796 ms
 7     Memory:1608 kb
 8 ****************************************************************/
 9
10 #include <cstdio>
11 #include <cmath>
12 #include <algorithm>
13
14 using namespace std;
15 const int N = 1e5 + 5;
16 const int SZ = 505;
17
18 int n, m;
19 int a[N];
20 int sz, b[N], st[SZ], cnt[SZ][2], tag[SZ], cnt_block;
21
22 inline int read() {
23     static int x;
24     static char ch;
25     x = 0, ch = getchar();
26     while (ch < '0' || '9' < ch)
27         ch = getchar();
28     while ('0' <= ch && ch <= '9') {
29         x = x * 10 + ch - '0';
30         ch = getchar();
31     }
32     return x;
33 }
34
35 inline void pre() {
36     int i;
37     sz = sqrt(n);
38     if (!sz) sz = 1;
39     for (i = 1; i <= n; ++i) {
40         if (i % sz == 1 || sz == 1) st[++cnt_block] = i;
41         b[i] = cnt_block, ++cnt[cnt_block][0];
42     }
43     st[cnt_block + 1] = n + 1;
44 }
45
46 inline void push_tag(int B) {
47     static int i;
48     if (!tag[B]) return;
49     for (i = st[B]; i < st[B + 1]; ++i)
50         a[i] = !a[i];
51     swap(cnt[B][0], cnt[B][1]);
52     tag[B] = 0;
53 }
54
55 inline void change(int x, int y) {
56     static int i, t1, t2;
57     t1 = b[x], t2 = b[y];
58     for (i = t1 + 1; i < t2; ++i) tag[i] = !tag[i];
59     if (t1 == t2)
60         for (push_tag(t1), i = x; i <= y; ++i)
61             --cnt[t1][a[i]], a[i] = !a[i], ++cnt[t1][a[i]];
62     else {
63         for (push_tag(t1), i = x; i < st[t1 + 1]; ++i)
64             --cnt[t1][a[i]], a[i] = !a[i], ++cnt[t1][a[i]];
65         for (push_tag(t2), i = st[t2]; i <= y; ++i)
66             --cnt[t2][a[i]], a[i] = !a[i], ++cnt[t2][a[i]];
67     }
68 }
69
70 inline int query(int x, int y) {
71     static int i, t1, t2, res;
72     t1 = b[x], t2 = b[y], res = 0;
73     for (i = t1 + 1; i < t2; ++i)
74         res += cnt[i][!tag[i]];
75     if (t1 == t2)
76         for (push_tag(t1), i = x; i <= y; ++i) res += a[i];
77     else {
78         for (push_tag(t1), i = x; i < st[t1 + 1]; ++i) res += a[i];
79         for (push_tag(t2), i = st[t2]; i <= y; ++i) res += a[i];
80     }
81     return res;
82 }
83
84 int main() {
85     int i, oper, x, y;
86     n = read(), m = read();
87     pre();
88     for (i = 1; i <= m; ++i) {
89         oper = read(), x = read(), y = read();
90         if (oper == 0) change(x, y);
91         else printf("%d\n", query(x, y));
92     }
93     return 0;
94 }

View Code

转载于:https://www.cnblogs.com/rausen/p/4418125.html

BZOJ1230 [Usaco2008 Nov]lites 开关灯相关推荐

  1. bzoj1230[Usaco2008 Nov]lites 开关灯*

    bzoj1230[Usaco2008 Nov]lites 开关灯 题意: 一个01序列,初始全部元素为0,两种操作:l到r全部元素取反.询问l到r1的个数.序列长度≤100000,询问个数≤10000 ...

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

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

  3. [BZOJ] 1620: [Usaco2008 Nov]Time Management 时间管理

    1620: [Usaco2008 Nov]Time Management 时间管理 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 850  Solved ...

  4. bzoj 1619: [Usaco2008 Nov]Guarding the Farm 保卫牧场(DFS)

    1619: [Usaco2008 Nov]Guarding the Farm 保卫牧场 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 913  Solv ...

  5. bzoj 1620: [Usaco2008 Nov]Time Management 时间管理(贪心)

    1620: [Usaco2008 Nov]Time Management 时间管理 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 834  Solved ...

  6. bzoj 1618: [Usaco2008 Nov]Buying Hay 购买干草(完全背包)

    1618: [Usaco2008 Nov]Buying Hay 购买干草 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1196  Solved: 62 ...

  7. bzoj1231 [Usaco2008 Nov]mixup2 混乱的奶牛——状压DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1231 小型状压DP: f[i][j] 表示状态为 j ,最后一个奶牛是 i 的方案数: 所以 ...

  8. BZOJ 1619 [Usaco2008 Nov]Guarding the Farm 保卫牧场:dfs【灌水】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1619 题意: 给你一个n*m的地形图,位置(x,y)的海拔为h[x][y]. 一个山顶的定 ...

  9. BZOJ 1229: [USACO2008 Nov]toy 玩具

    题意:就是经典餐巾问题 就是天数特别大 到了10^5 这道题弄了我好久啊,第一道三分题,不过好像三分并不难,我怕我讲不好,网上那么多我就不在这里说了. 网上面题解写的简直是太草率+简单了吧.坑爹的百度 ...

  10. python三级联动_ajax 实现三级联动

    ajax 实现三级联动,相当于写了一个小插件,用的时候直接拿过来用就可以了,这里我用了数据库中的chinastates表, 数据库内容很多,三级联动里的地区名称都在里面,采用的是代号副代号的方式 比如 ...

最新文章

  1. keras 的 example 文件 lstm_text_generation.py 解析
  2. java 装配_JAVA入门[13]-Spring装配Bean
  3. SQL中OBJECT_ID,OBJECT_NAME,OBJECT_DEFINITION的用法
  4. IO 密集型服务 性能优化实战记录
  5. 基于FPGA实现Camera Link接口
  6. delphi 演示数据路径
  7. 【报告分享】2022年中国商业十大热点展望.pdf(附下载链接)
  8. java时间格式24小时制12小时制
  9. eclipse常见问题配置
  10. 项目实施之预防注入漏洞
  11. eclipse 主题设置
  12. 自己不能跑的车凭什么叫自行车?B站硬核up主把自行车做成了自动驾驶
  13. png、jpg图片格式的区别及
  14. 【软件定义汽车】SOA框架介绍
  15. linux tc限制网卡速度,使用TC 对LINUX服务器网卡进行带宽限制的办法
  16. 修11代12代希捷坏道
  17. MySQL查询和删除重复记录
  18. 学无止境,笔不停耕----写博客两周年的一些感悟
  19. PHP商城 商品模块 数据库 表设计
  20. 脑壳疼?别再写满屏的 if-else 了,看我怎么消灭它!

热门文章

  1. 管理:权力是用来完成责任的
  2. NWT融资一百万,被老张嘲笑了
  3. linux 源码包解压编译安装
  4. java import list_Java中的List集合
  5. python字符串_Python的字符串和编码
  6. 学生网上评教系统php,学生评教系统设计与实现.doc
  7. QueueUserWorkItem函数
  8. iOS开发之画图板(贝塞尔曲线)
  9. 【字符编码系列】字符,字符集,字符编码解惑
  10. 四 Lync Server 2013 部署指南-前端部署(2)