线段树,嗯,嗯。

本题有5个操作,并且对象都是区间:1. 开灯 2.关灯 3.把开的关,关的打开 4.询问区间有几盏灯亮着 5.询问区间最多连续亮着几盏灯

结构体里的cov是否完全覆盖,-1表示未完全覆盖,0表示区间的灯都暗着,1表示区间灯都亮着。

#include <iostream> using namespace std; #define MAX 2000000 #define LL(x) (x<<1) #define RR(x) (x<<1|1) #define Mid(a,b) ((a+b)>>1) int cnt,ri,k; struct node{ int l,r,mid; int cov; }tree[MAX+10]; void build(int l,int r,int num) { tree[num].l=l; tree[num].r=r; tree[num].cov=1; if(l==r) return; else { int mid=tree[num].mid=Mid(l,r); build(l,mid,LL(num)); build(mid+1,r,RR(num)); } } void turn(int l,int r,int num,int ans) { if(ans==tree[num].cov) return; if(l==tree[num].l&&r==tree[num].r) { tree[num].cov=ans; return; } if(tree[num].cov!=-1) { tree[LL(num)].cov=tree[RR(num)].cov=tree[num].cov; tree[num].cov=-1; } int mid=tree[num].mid; if(r<=mid) turn(l,r,LL(num),ans); else if(l>mid) turn(l,r,RR(num),ans); else { turn(l,mid,LL(num),ans); turn(mid+1,r,RR(num),ans); } } void change(int l,int r,int num) { if(tree[num].l==l&&tree[num].r==r) { if(tree[num].cov!=-1) { tree[num].cov^=1; return; } } if(tree[num].cov!=-1) { tree[LL(num)].cov=tree[RR(num)].cov=tree[num].cov; tree[num].cov=-1; } int mid=tree[num].mid; if(r<=mid) change(l,r,LL(num)); else if(l>mid) change(l,r,RR(num)); else { change(l,mid,LL(num)); change(mid+1,r,RR(num)); } } int count(int l,int r,int num) { if(tree[num].cov!=-1) { return (r-l+1)*tree[num].cov; } int mid=tree[num].mid; if(r<=mid) count(l,r,LL(num)); else if(l>mid) count(l,r,RR(num)); else return count(l,mid,LL(num))+count(mid+1,r,RR(num)); } void query(int l,int r,int num) { if(tree[num].l==l&&tree[num].r==r) { if(tree[num].cov!=-1) { if(tree[num].cov==1) { if(l==ri+1) cnt+=r-l+1; else cnt=r-l+1; if(cnt>k) k=cnt; ri=r; } return; } } if(tree[num].cov!=-1) { tree[LL(num)].cov=tree[RR(num)].cov=tree[num].cov; } int mid=tree[num].mid; if(r<=mid) query(l,r,LL(num)); else if(l>mid) query(l,r,RR(num)); else { query(l,mid,LL(num)); query(mid+1,r,RR(num)); } } int main() { int n,m,i,l,r; char ch; while(scanf("%d%d",&n,&m)!=EOF) { build(1,n,1); while(m--) { scanf(" %c%d%d",&ch,&l,&r); if(ch=='C') turn(l,r,1,0); else if(ch=='S') turn(l,r,1,1); else if(ch=='A') change(l,r,1); else if(ch=='Q') printf("%d/n",count(l,r,1)); else if(ch=='L') { k=cnt=0; ri=-1; query(l,r,1); printf("%d/n",k); } } } return 0; }

FOJ 1968 Twinkling lights III相关推荐

  1. FZU 1968 Twinkling lights III

    Twinkling lights III Time Limit: 8000ms Memory Limit: 131072KB This problem will be judged on FZU. O ...

  2. 2015英国女王殿下的圣诞致辞

    每年的圣诞节,伊丽莎白女王都会准时出现,用最标准的皇室英腔,带给大家一段圣诞贺词.一年出一次不到10分钟的视频,太珍贵.女王殿下每年都坚持亲自撰写演讲稿,严谨的文风和措辞,让我们这群"乡巴佬 ...

  3. 地图不是领地尼克·格里尔的采访

    Information designers and data visualization practitioners are often concerned with The Map - how it ...

  4. 考研英语 - word-list-27

    每天十个单词,本博客收集整理自<考研英语词汇>,仅供学习和个人积累. 新东方单词在线阅读地址 ,希望这个链接一直都有效 :) 2017年06月21日 20:54:05 tide 词义: n ...

  5. CodeForces - 1523E Crypto Lights(组合数学+推公式)

    题目链接:点击查看 题目大意:给出 nnn 个初始时熄灭的灯泡,每次操作会等概率打开一个灯泡,当每 kkk 个连续的灯泡中出现了大于一个亮着的灯泡时停止操作,问期望操作次数是多少 题目分析:组合数学题 ...

  6. 为了数学的明天,,穿越时空,重返南大(III)-

    为了数学的明天,,穿越时空,重返南大(III)     进入二十一世纪,非阿基米德数学(比如:含有无穷小的连续统)逐渐兴起,我们用该如何面对?     这是一个基本问题,必须彻底搞清楚,事实求是.   ...

  7. 剑指offer:面试题32 - III. 从上到下打印二叉树 III

    题目: 从上到下打印二叉树 III 请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推. 例如: 给定 ...

  8. 1968年12月9日,恩格尔巴特公开演示了世界上第一个鼠标盒子

    鼠标之父"道格拉斯·恩格尔巴特 腾讯科技讯,肖华2013年12月19日编译 计算机的几次革命和大规模普及都是始于人机交互的改变,今年7月2日,"鼠标之父"道格拉斯·恩格尔 ...

  9. 基于μC/OS—III的CC1120驱动程序设计

    基于μC/OS-III的CC1120驱动程序设计 时间:2014-01-21 来源:电子设计工程 作者:张绍游,张贻雄,石江宏 关键字:CC1120   嵌入式操作系统   STM32F103ZE   ...

最新文章

  1. 第十六届智能车竞赛赛道设计第一版本
  2. 基于自然语言的软件工程和程序设计(下)
  3. Source Insight,修改字体
  4. 用户计算机MAC地址在哪看,怎么查看远程电脑mac地址
  5. Bugku密码学(一)
  6. 【若依(ruoyi)】重置密码SQL脚本
  7. iview 使用笔记
  8. 详解 height 和 width 属性
  9. 吴恩达深度学习2.1练习_Improving Deep Neural Networks_Regularization
  10. 转:过度疲劳的27个信号与预防方法
  11. openstack初探
  12. linux账号密码登录,在自己的小linux上实现用户具有账号密码才可以登录
  13. vcard怎么转excel vcf转excel神器教程
  14. 【案例】融360:智能金融系统建设最佳实践案例
  15. Google earth engine(GEE):基于MODIS的LST(地表温度数据)计算一定时间序列的城市热岛强度(UHI),并绘制直方图
  16. WannaCry勒索病毒分析过程**中**
  17. 几款主流好用的富文本编辑器(所见即所得常用编辑器)介绍
  18. Filter的过滤器链
  19. Solidworks2020中零件图的材质无法正常显示的问题(只有在选中零件时材质才能正常显示)
  20. 微信小程序实例:创建下发模板消息实例

热门文章

  1. java计算乘地铁费用_Java_地铁购票系统
  2. 【Zynq UltraScale+ MPSoC解密学习7】Zynq UltraScale+的PMU
  3. 设计自有芯片将成为新常态?
  4. 逍遥模拟器获取服务器信息出错,前沿科技资讯:逍遥安卓模拟器网络不稳定如何办(显示网络异常解决方法)...
  5. 苹果强制使用HTTPS传输后APP开发者必须知道的事
  6. 注册企业腾讯邮箱需要对GoDaddy设置域名解析
  7. CSU_WF-中南大学网络服务队2020招新培训-硬件知识
  8. 计算机网络 『内部网关协议IGP中的路由信息协议RIP』
  9. 微信小程序制作全流程(1)
  10. Flex使用ribbit.com的服务给手机发送短信SMS