FZU 1968 Twinkling lights III
Twinkling lights III
This problem will be judged on FZU. Original ID: 1968
64-bit integer IO format: %I64d Java class name: Main
Twinkling lights一直以来都很好玩的游戏。或许你还记得FZU1069 Twinkling lights 和FZU1420 Twinkling lights II。现在,Bluewind改变了一下游戏规则,游戏将变得更好玩。
N盏灯排成一行,编号1..N,起初的时候,所有的灯是开着的。Bluewind将执行M个操作,操作分成五种:
C x y,把编号从x到y的灯都关掉,原来关着的灯保持不变。
S x y,把编号从x到y的灯都开起来,原来开着的灯依旧开着。
A x y,让编号从x到y的灯都改变状态,即把原来开的灯关了,原来关了的灯开起来。
Q x y,查询编号从x到y中开着的灯的个数。
L x y,查询编号从x到y中最长连续开着的灯的个数。
Input
第一行两个整数N,M(1<=N,M<=500,000)表示有N盏灯,M个操作。
接下来M行,每行按指定格式给出一个操作,其中(1<=x<=y<=N)。
Output
对于每条Q查询操作和L查询操作,输出相应的结果。
Sample Input
10 5 C 2 8 S 5 7 A 1 10 Q 1 10 L 1 10
Sample Output
4 3
Source
1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 const int maxn = 500010; 5 struct node { 6 int lt,rt,cover; 7 } tree[maxn<<2]; 8 int ret; 9 void build(int L,int R,int v) { 10 tree[v].lt = L; 11 tree[v].rt = R; 12 tree[v].cover = 1; 13 if(L == R) return; 14 int mid = (L + R)>>1; 15 build(L,mid,v<<1); 16 build(mid+1,R,v<<1|1); 17 } 18 inline void pushup(int v) { 19 if(tree[v<<1].cover == tree[v<<1|1].cover) 20 tree[v].cover = tree[v<<1].cover; 21 else tree[v].cover = -1; 22 } 23 inline void pushdown(int v) { 24 if(tree[v].cover >= 0) { 25 tree[v<<1].cover = tree[v<<1|1].cover = tree[v].cover; 26 tree[v].cover = -1; 27 } 28 } 29 void update(int lt,int rt,int val,bool sel,int v) { 30 if(sel && tree[v].cover == val) return; 31 if(lt <= tree[v].lt && rt >= tree[v].rt && (sel || !sel && tree[v].cover >= 0)) { 32 if(sel) tree[v].cover = val; 33 else tree[v].cover ^= 1; 34 return; 35 } 36 pushdown(v); 37 if(lt <= tree[v<<1].rt) update(lt,rt,val,sel,v<<1); 38 if(rt >= tree[v<<1|1].lt) update(lt,rt,val,sel,v<<1|1); 39 pushup(v); 40 } 41 void query(int lt,int rt,int &ans,int &r,bool sel,int v) { 42 if(!tree[v].cover) return; 43 if(lt <= tree[v].lt && rt >= tree[v].rt && tree[v].cover > 0) { 44 if(sel) ans += tree[v].rt - tree[v].lt + 1; 45 else { 46 if(r + 1 == tree[v].lt) ans += tree[v].rt - tree[v].lt + 1; 47 else ans = tree[v].rt - tree[v].lt + 1; 48 } 49 r = tree[v].rt; 50 ret = max(ans,ret); 51 return; 52 } 53 pushdown(v); 54 if(lt <= tree[v<<1].rt) query(lt,rt,ans,r,sel,v<<1); 55 if(rt >= tree[v<<1|1].lt) query(lt,rt,ans,r,sel,v<<1|1); 56 pushup(v); 57 } 58 int main() { 59 int n,m,x,y,ans,r; 60 char op[3]; 61 while(~scanf("%d %d",&n,&m)) { 62 build(1,n,1); 63 while(m--) { 64 scanf("%s%d%d",op,&x,&y); 65 switch(op[0]) { 66 case 'C': 67 update(x,y,0,true,1); 68 break; 69 case 'S': 70 update(x,y,1,true,1); 71 break; 72 case 'A': 73 update(x,y,0,false,1); 74 break; 75 case 'Q': 76 ret = ans = r = 0; 77 query(x,y,ans,r,true,1); 78 printf("%d\n",ret); 79 break; 80 case 'L': 81 ret = ans = r = 0; 82 query(x,y,ans,r,false,1); 83 printf("%d\n",ret); 84 break; 85 } 86 } 87 } 88 return 0; 89 }
View Code
转载于:https://www.cnblogs.com/crackpotisback/p/4466212.html
FZU 1968 Twinkling lights III相关推荐
- FOJ 1968 Twinkling lights III
线段树,嗯,嗯. 本题有5个操作,并且对象都是区间:1. 开灯 2.关灯 3.把开的关,关的打开 4.询问区间有几盏灯亮着 5.询问区间最多连续亮着几盏灯 结构体里的cov是否完全覆盖,-1表示未完全 ...
- 2015英国女王殿下的圣诞致辞
每年的圣诞节,伊丽莎白女王都会准时出现,用最标准的皇室英腔,带给大家一段圣诞贺词.一年出一次不到10分钟的视频,太珍贵.女王殿下每年都坚持亲自撰写演讲稿,严谨的文风和措辞,让我们这群"乡巴佬 ...
- 地图不是领地尼克·格里尔的采访
Information designers and data visualization practitioners are often concerned with The Map - how it ...
- 考研英语 - word-list-27
每天十个单词,本博客收集整理自<考研英语词汇>,仅供学习和个人积累. 新东方单词在线阅读地址 ,希望这个链接一直都有效 :) 2017年06月21日 20:54:05 tide 词义: n ...
- CodeForces - 1523E Crypto Lights(组合数学+推公式)
题目链接:点击查看 题目大意:给出 nnn 个初始时熄灭的灯泡,每次操作会等概率打开一个灯泡,当每 kkk 个连续的灯泡中出现了大于一个亮着的灯泡时停止操作,问期望操作次数是多少 题目分析:组合数学题 ...
- 为了数学的明天,,穿越时空,重返南大(III)-
为了数学的明天,,穿越时空,重返南大(III) 进入二十一世纪,非阿基米德数学(比如:含有无穷小的连续统)逐渐兴起,我们用该如何面对? 这是一个基本问题,必须彻底搞清楚,事实求是. ...
- 剑指offer:面试题32 - III. 从上到下打印二叉树 III
题目: 从上到下打印二叉树 III 请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推. 例如: 给定 ...
- fzu 2150 Fire Game 【身手BFS】
称号:fzu 2150 Fire Game :给出一个m*n的图,'#'表示草坪,' . '表示空地,然后能够选择在随意的两个草坪格子点火.火每 1 s会向周围四个格子扩散,问选择那两个点使得燃烧全部 ...
- 1968年12月9日,恩格尔巴特公开演示了世界上第一个鼠标盒子
鼠标之父"道格拉斯·恩格尔巴特 腾讯科技讯,肖华2013年12月19日编译 计算机的几次革命和大规模普及都是始于人机交互的改变,今年7月2日,"鼠标之父"道格拉斯·恩格尔 ...
最新文章
- 如何设置鼠标移开后css,如何设置鼠标离开时由hover设置的样式不变?
- Hadoop的安装(单机和集群)
- html加上 extjs右键,extjs 处理HTML事件和自定义事件
- linux显示存储与标定不符,找到了linux分区顺序错乱修复方法
- JavaScript实现冒泡排序 可视化
- CAN总线在嵌入式Linux下驱动程序的实现
- java getbytes 长度_JAVA中的getBytes()方法
- 集线器,交换机,路由器工作层次的区别
- fdisk:Linux 下管理磁盘分区的利器
- 千年私服服务器用户名创建,千年私服详细安装技术文章
- 华为:实现流程优化的方法
- 2021-07-23 N卡显示器亮度设置
- Mysql 与 python 的使用
- 商场会员营销小程序-连接会员,赋能商家
- WordPress升级后,新版编辑器不能使用解决办法
- 年度目标进度和完成进度对比
- 少年之文明与国之文明——---从奥运会看国人素质之飞跃
- 吃得苦中苦 方为人上人
- 英语中的分数 带分数 小数怎么读
- 改成每天晚上锻炼身体