bzoj1230[Usaco2008 Nov]lites 开关灯*
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 开关灯*相关推荐
- B1230 [Usaco2008 Nov]lites 开关灯 线段树
就是线段树维护异或和.之前我线段树区间修改down都是修改当前区间,结果debug出不来,改成每次向下了. 题干: DescriptionFarmer John尝试通过和奶牛们玩益智玩具来保持他的奶牛 ...
- [BZOJ] 1620: [Usaco2008 Nov]Time Management 时间管理
1620: [Usaco2008 Nov]Time Management 时间管理 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 850 Solved ...
- 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 ...
- bzoj 1620: [Usaco2008 Nov]Time Management 时间管理(贪心)
1620: [Usaco2008 Nov]Time Management 时间管理 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 834 Solved ...
- bzoj 1618: [Usaco2008 Nov]Buying Hay 购买干草(完全背包)
1618: [Usaco2008 Nov]Buying Hay 购买干草 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 1196 Solved: 62 ...
- bzoj1231 [Usaco2008 Nov]mixup2 混乱的奶牛——状压DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1231 小型状压DP: f[i][j] 表示状态为 j ,最后一个奶牛是 i 的方案数: 所以 ...
- BZOJ 1619 [Usaco2008 Nov]Guarding the Farm 保卫牧场:dfs【灌水】
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1619 题意: 给你一个n*m的地形图,位置(x,y)的海拔为h[x][y]. 一个山顶的定 ...
- BZOJ 1229: [USACO2008 Nov]toy 玩具
题意:就是经典餐巾问题 就是天数特别大 到了10^5 这道题弄了我好久啊,第一道三分题,不过好像三分并不难,我怕我讲不好,网上那么多我就不在这里说了. 网上面题解写的简直是太草率+简单了吧.坑爹的百度 ...
- python三级联动_ajax 实现三级联动
ajax 实现三级联动,相当于写了一个小插件,用的时候直接拿过来用就可以了,这里我用了数据库中的chinastates表, 数据库内容很多,三级联动里的地区名称都在里面,采用的是代号副代号的方式 比如 ...
最新文章
- 2009-2019年全国大学生智能汽车竞赛获奖数据分析
- python读取文件夹下所有图像 预处理_Tensorflow之tif图像文件预处理
- eclipse没有日志_「开源资讯」Jboot v3.3.6 发布,更强大的控制台请求日志
- ubuntu 开机黑屏
- SVN 下载与安装(超简单)!!!
- 微信屏蔽网址解决办法:实现被微信屏蔽的网址在微信内正常访问
- AD7606数据转换
- 2015年京胜杯删数!删数
- CODESYS在工厂自动化中的应用案例:运动控制集成方案
- sdust-Java-字符串集合求并集 (10分)
- (67)TCL脚本命令【incr(一个参数)】
- ESXi服务器CPU睿频检测
- 字符串中的 ↵ 回车符替换
- C语言:输入两个数字,将其按从小到大输出!
- META-INF/MANIFEST.MF 文件
- Tiny Video Networks翻译
- APS排产提高生产效率的五大妙招
- 将扩散模型应用到文本领域
- WIFI|WPA_SUPPLICANT翻译
- 微信小程序背景图片完全覆盖显示