1230: [Usaco2008 Nov]lites 开关灯
1230: [Usaco2008 Nov]lites 开关灯
Time Limit: 10 Sec Memory Limit: 162 MB
Submit: 1162 Solved: 589
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
题解:这是个比较有趣的线段树问题——将一般的区间加上一个数字变成了区间反转,不过这样也并么有难多少,还是一样的打lazytag,别的没了(phile:看样子你这次程序又偷懒狂用ext往下推呵呵呵 HansBug:那是那是,不过其实不用看样子也能搞,只是繁一点)
1 var
2 i,j,k,l,m,n:longint;
3 a,b:array[0..1000000] of longint;
4 function max(x,y:longint):longint;inline;
5 begin
6 if x>y then max:=x else max:=y;
7 end;
8 function min(x,y:longint):longint;inline;
9 begin
10 if x<y then min:=x else min:=y;
11 end;
12 procedure built(z,x,y:longint);inline;
13 begin
14 if x=y then
15 a[z]:=0
16 else
17 begin
18 built(z*2,x,(x+y) div 2);
19 built(z*2+1,(x+y) div 2+1,y);
20 a[z]:=a[z*2]+a[z*2+1];
21 end;
22 b[z]:=0;
23 end;
24 procedure ext(z,x,y:longint);inline;
25 begin
26 if b[z]=0 then exit;
27 a[z]:=(y-x+1)-a[z];
28 if x<>y then
29 begin
30 b[z*2]:=1-b[z*2];
31 b[z*2+1]:=1-b[z*2+1];
32 end;
33 b[z]:=0;
34 end;
35 function op(z,x,y,l,r:longint):longint;inline;
36 var a1,a2,a3,a4:longint;
37 begin
38 if l>r then exit(0);
39 ext(z,x,y);
40 if (x=l) and (y=r) then
41 begin
42 b[z]:=1;
43 exit(((r-l+1)-a[z])-a[z]);
44 end;
45 a2:=op(z*2,x,(x+y) div 2,l,min(r,(x+y) div 2));
46 a3:=op(z*2+1,(x+y) div 2+1,y,max(l,(x+y) div 2+1),r);
47 a[z]:=a[z]+a2+a3;
48 exit(a2+a3);
49 end;
50 function cal(z,x,y,l,r:longint):longint;inline;
51 var a1,a2,a3,a4:longint;
52 begin
53 if l>r then exit(0);
54 ext(z,x,y);
55 if (x=l) and (y=r) then exit(a[z]);
56 exit(cal(z*2,x,(x+y) div 2,l,min(r,(x+y) div 2))+cal(z*2+1,(x+y) div 2+1,y,max(l,(x+y) div 2+1),r));
57 end;
58 begin
59 readln(n,m);
60 built(1,1,n);
61 for i:=1 to m do
62 begin
63 readln(j,k,l);
64 case j of
65 0:begin
66 op(1,1,n,k,l);
67 end;
68 1:begin
69 writeln(cal(1,1,n,k,l));
70 end;
71 end;
72 end;
73 readln;
74 end.
75
- ASP.NET Core中使用IOC三部曲(一.使用ASP.NET Core自带的IOC容器)
- CVE-2017-11882漏洞复现
- ASP.NET Core使用静态文件、目录游览与MIME类型管理
- Python 黑客——使用Python破解门禁系统
- ASP.NET Core文件上传与下载(多种上传方式)
- 采用Opserver来监控你的ASP.NET项目系列(三、监控你的服务器状态)
- eclipse中运行hbase时不能显示表中的值
- 从 PHP 到 Java
- 用Lua定制Redis命令
- 见招拆招-PostgreSQL中文全文索引效率优化
- 通过2-3-4树理解红黑树
- Hmaster无法启动
- C语言第八讲,指针*
- C语言第七讲,函数入门.
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Pandas,数据处理的好帮手!
- 如何用Python,制作疫情可视化大屏?
- vue实战电商管理后台
- 微服务应用性能如何?APM监控工具来告诉你!
- 深拷贝手写
- 前端进程间通讯的渗透之术
- 动态气泡图,拿走不谢!
- 刷爆全网的动态条形图,原来5行Python代码就能实现!
- Vue框架av88732281笔记
- iOS-组件化(OC篇)
- Angular async pipe在html模板中的一个实际应用
- 3D引擎中LOD技术的理论基础
- one-hot encoding不是万能的,这些分类变量编码方法你值得拥有
- 【5分钟玩转Lighthouse】爬取JavaScript动态渲染页面
- 科技爱好者周刊(第 127 期):未来人人开发软件,几乎没人编码