线段树..

---------------------------------------------------------------------------------

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#define rep( i , n ) for( int i = 0 ; i < n ; ++i )
#define clr( x , c ) memset( x , c , sizeof( x ) )
#define L( x ) ( x << 1 )
#define R( x ) ( L( x ) ^ 1 )
#define LC( x ) tree[ L( x ) ]
#define RC( x ) tree[ R( x ) ]
#define mid( l , r ) ( ( l + r ) >> 1 )
using namespace std;
const int maxn = int( 1e5 ) + 5;
struct Node {
int l , r;
int sum;
bool s;
Node() : sum( 0 ) {
s = false;
}
};
Node tree[ maxn << 2 ];
void maintain( int x ) {
Node &o = tree[ x ];
o.sum = o.r - o.l + 1 - o.sum;
}
void pushdown( int x ) {
Node &o = tree[ x ];
if( o.s ) {
o.s = false;
maintain( L( x ) );
maintain( R( x ) );
LC( x ).s ^= 1;
RC( x ).s ^= 1;
}
}
int L , R;
void update( int x ) {
Node &o = tree[ x ];
pushdown( x );
if( L <= o.l && o.r <= R ) {
o.s = true;
maintain( x );
} else {
int m = mid( o.l , o.r );
if( L <= m ) update( L( x ) );
if( m < R) update( R( x ) );
o.sum = LC( x ).sum + RC( x ).sum;
}
}
int query( int x ) {
Node &o = tree[ x ];
if( L <= o.l && o.r <= R )
   return o.sum;
pushdown( x );
int m = mid( o.l , o.r );
int ans = 0;
if( L <= m ) 
   ans += query( L( x ) );
if( m < R )
   ans += query( R( x ) );
return ans;
}
void build( int x , int l , int r ) {
Node &o = tree[ x ];
o.l = l , o.r = r;
if( l == r ) return;
int m = mid( l , r );
build( L( x ) , l , m );
build( R( x ) , m + 1 , r );
}
int main() {
// freopen( "test.in" , "r" , stdin );
int n , m;
cin >> n >> m;
build( 1 , 1 , n );
while( m-- ) {
int op;
scanf( "%d%d%d" , &op , &L , &R );
if( op )
   printf( "%d\n" , query( 1 ) );
else
   update( 1 );
}
return 0;
}

---------------------------------------------------------------------------------

1230: [Usaco2008 Nov]lites 开关灯

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 1181  Solved: 604
[Submit][Status][Discuss]

Description

Farmer John尝试通过和奶牛们玩益智玩具来保持他的奶牛们思维敏捷. 其中一个大型玩具是牛栏中的灯. N (2 <= N <= 100,000) 头奶牛中的每一头被连续的编号为1..N, 站在一个彩色的灯下面.刚到傍晚的时候, 所有的灯都是关闭的. 奶牛们通过N个按钮来控制灯的开关; 按第i个按钮可以改变第i个灯的状态.奶牛们执行M (1 <= M <= 100,000)条指令, 每个指令都是两个整数中的一个(0 <= 指令号 <= 1). 第1种指令(用0表示)包含两个数字S_i和E_i (1 <= S_i <= E_i <= N), 它们表示起始开关和终止开关. 奶牛们只需要把从S_i到E_i之间的按钮都按一次, 就可以完成这个指令. 第2种指令(用1表示)同样包含两个数字S_i和E_i (1 <= S_i <= E_i <= N), 不过这种指令是询问从S_i到E_i之间的灯有多少是亮着的. 帮助FJ确保他的奶牛们可以得到正确的答案.

Input

* 第 1 行: 用空格隔开的两个整数N和M

* 第 2..M+1 行: 每行表示一个操作, 有三个用空格分开的整数: 指令号, S_i 和 E_i

Output

第 1..询问的次数 行: 对于每一次询问, 输出询问的结果.

Sample Input

4 5
0 1 2
0 2 4
1 2 3
0 2 4
1 1 4

输入解释:
一共有4盏灯; 5个指令. 下面是执行的情况:

1 2 3 4
Init: O O O O O = 关 * = 开
0 1 2 -> * * O O 改变灯 1 和 2 的状态
0 2 4 -> * O * *
1 2 3 -> 1 输出在2..3的范围内有多少灯是亮的
0 2 4 -> * * O O 改变灯 2 ,3 和 4 的状态
1 1 4 -> 2 输出在1..4的范围内有多少灯是亮的

Sample Output

1
2

HINT

Source

Gold

转载于:https://www.cnblogs.com/JSZX11556/p/4557319.html

BZOJ 1230: [Usaco2008 Nov]lites 开关灯( 线段树 )相关推荐

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

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

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

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

  3. BZOJ #3064. Tyvj 1518 CPU监控(线段树,历史最值)

    BZOJ #3064. Tyvj 1518 CPU监控(线段树,历史最值) Solution 我们考虑用线段树维护此题. 先不考虑历史最值. 大概需要维护一种特殊的懒标记(x,y)(x,y)(x,y) ...

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

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

  5. BZOJ.4695.最假女选手(线段树 Segment tree Beats!)

    题目链接 区间取\(\max,\ \min\)并维护区间和是普通线段树无法处理的. 对于操作二,维护区间最小值\(mn\).最小值个数\(t\).严格次小值\(se\). 当\(mn\geq x\)时 ...

  6. BZOJ 4719: [Noip2016]天天爱跑步 线段树合并

    title BZOJ 4719 LUOGU 1600 简化题意: 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是一个养成类游戏,需要玩家每 ...

  7. bzoj 2653 middle (可持久化线段树)

    middle Time Limit: 20 Sec  Memory Limit: 512 MB Submit: 1981  Solved: 1097 [Submit][Status][Discuss] ...

  8. 【BZOJ 3165】 [Heoi2013]Segment 李超线段树

    所谓李超线段树就是解决此题一类的问题(线段覆盖查询点最大(小)),把原本计算几何的题目变成了简单的线段树,巧妙地结合了线段树的标记永久化与标记下传,在不考虑精度误差的影响下,打法应该是这样的. #in ...

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

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

  10. BZOJ 5394 [Ynoi2016]炸脖龙 (线段树+拓展欧拉定理)

    题目大意:给你一个序列,需要支持区间修改,以及查询一段区间$a_{i}^{a_{i+1}^{a_{i+2}...}}mod\;p$的值,每次询问的$p$的值不同 对于区间修改,由线段树完成,没什么好说 ...

最新文章

  1. 计算机对下列几种存储器访问速度,2005年7月自考02275计算机基础与程序设计真题及答案...
  2. uva 1476 - Error Curves
  3. 【清单】值得「等待」的12个指示加载状态的 js 库
  4. mysql函数封装_Mysql对文件操作的封装
  5. Symfony 框架实战教程——第一天:创建项目(转)
  6. 用Cairo画IBM logo并输出为pdf,ps,svg格式文件
  7. 【初体验】valgrind分析程序性能
  8. mysql清除旧版本_MYSQL使用INNODB时及时清理旧版本数据
  9. java开发之分页查询
  10. weblogic 10.x 上开发restful服务
  11. Extjs基础入门视频教程
  12. 破解软件试用版到期问题通用办法
  13. MCU芯片通信接口设计
  14. 9月书讯(下)| 开学季,读新书
  15. C.I.刘易斯的学术之路--- 刘易斯逻辑之十二尾篇
  16. 用javascript实现九九乘法口诀表
  17. STM32 CubeIDE 断点失效的解决方法
  18. 微信小程序 image-cropper 还原按钮控制
  19. vue 高德地图点击获取坐标与地理位置
  20. 【Android Studio学习】第一篇、制作一个拥有登录和注册功能的简易APP

热门文章

  1. ODAC(V9.5.15) 学习笔记(十六)直接访问模式
  2. 【C#】SQL数据库助手类2.0(自用)
  3. SQL Server2000企业管理器打不开-解决方法
  4. Java 集合处理/ 空值处理/ 异常处理,使用心得分享!
  5. 一套完整的 Java 线上故障排查技巧,建议收藏!
  6. 百亿流量系统,是如何从0开始搭建的?
  7. 从P1到P7——我在淘宝这7年(一)
  8. 全站HTTPS来了!有何优势、与HTTP有何不同
  9. 架构师必备之最全最系统的 Android 界面性能调优资料
  10. 如何用一个废旧的笔记本打造一个家庭网络服务器?