bzoj1230[Usaco2008 Nov]lites 开关灯

题意:

一个01序列,初始全部元素为0,两种操作:l到r全部元素取反、询问l到r1的个数。序列长度≤100000,询问个数≤100000。

题解:

线段树维护区间和,区间修改就让区间和变为区间长度减原区间和。

代码:

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 #include <queue>
 5 #define inc(i,j,k) for(int i=j;i<=k;i++)
 6 #define maxn 400010
 7 using namespace std;
 8
 9 inline int read(){
10     char ch=getchar(); int f=1,x=0;
11     while(ch<'0'||ch>'9'){if(ch=='-')f=-1; ch=getchar();}
12     while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
13     return f*x;
14 }
15 int sm[maxn],n,m,lr[maxn]; bool tg[maxn];
16 void update(int x){sm[x]=sm[x<<1]+sm[x<<1|1];}
17 void pushdown(int x){
18     if(tg[x]){
19         if(lr[x<<1])sm[x<<1]=lr[x<<1]-sm[x<<1],tg[x<<1]^=1;
20         if(lr[x<<1|1])sm[x<<1|1]=lr[x<<1|1]-sm[x<<1|1],tg[x<<1|1]^=1;
21         tg[x]^=1;
22     }
23 }
24 void build(int x,int l,int r){
25     lr[x]=r-l+1; if(l==r)return; int mid=(l+r)>>1; build(x<<1,l,mid); build(x<<1|1,mid+1,r);
26 }
27 void modify(int x,int l,int r,int ql,int qr){
28     pushdown(x); if(ql<=l&&r<=qr){tg[x]^=1; sm[x]=lr[x]-sm[x]; return;} int mid=(l+r)>>1;
29     if(ql<=mid)modify(x<<1,l,mid,ql,qr); if(mid<qr)modify(x<<1|1,mid+1,r,ql,qr); update(x);
30 }
31 int query(int x,int l,int r,int ql,int qr){
32     pushdown(x); if(ql<=l&&r<=qr)return sm[x]; int mid=(l+r)>>1,q=0;
33     if(ql<=mid)q+=query(x<<1,l,mid,ql,qr); if(mid<qr)q+=query(x<<1|1,mid+1,r,ql,qr); return q;
34 }
35 int main(){
36     n=read(); m=read(); build(1,1,n);
37     inc(i,1,m){
38         int opt=read(),l=read(),r=read(); if(!opt)modify(1,1,n,l,r);else printf("%d\n",query(1,1,n,l,r));
39     }
40     return 0;
41 }

20160917

转载于:https://www.cnblogs.com/YuanZiming/p/5882829.html

bzoj1230[Usaco2008 Nov]lites 开关灯*相关推荐

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

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

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

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

  3. 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 ...

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 2009-2019年全国大学生智能汽车竞赛获奖数据分析
  2. python读取文件夹下所有图像 预处理_Tensorflow之tif图像文件预处理
  3. eclipse没有日志_「开源资讯」Jboot v3.3.6 发布,更强大的控制台请求日志
  4. ubuntu 开机黑屏
  5. SVN 下载与安装(超简单)!!!
  6. 微信屏蔽网址解决办法:实现被微信屏蔽的网址在微信内正常访问
  7. AD7606数据转换
  8. 2015年京胜杯删数!删数
  9. CODESYS在工厂自动化中的应用案例:运动控制集成方案
  10. sdust-Java-字符串集合求并集 (10分)
  11. (67)TCL脚本命令【incr(一个参数)】
  12. ESXi服务器CPU睿频检测
  13. 字符串中的 ↵ 回车符替换
  14. C语言:输入两个数字,将其按从小到大输出!
  15. META-INF/MANIFEST.MF 文件
  16. Tiny Video Networks翻译
  17. APS排产提高生产效率的五大妙招
  18. 将扩散模型应用到文本领域
  19. WIFI|WPA_SUPPLICANT翻译
  20. 微信小程序背景图片完全覆盖显示

热门文章

  1. 数据库 三范式最简单最易记的解释
  2. 淘宝商品库MySQL优化实践的学习
  3. VMM2012应用指南之3-安装VMM2012
  4. 随笔:web服务器中建立一个小的个人站点
  5. Microsoft二任CEO业绩对比,说明什么?
  6. Spring Boot CMI 使用笔记
  7. java 气泡聊天消息_CSS3 巧妙实现聊天气泡
  8. visio2013跨线问题
  9. mysql 指定目录_mysql 更改默认数据目录
  10. 一对一关联(one-to-one)