csu1770: 按钮控制彩灯实验 (树状数组)
来源:互联网 发布:linux中echo命令详解 编辑:程序博客网 时间:2024/06/05 00:10
Description
应教学安排,yy又去开心的做电学实验了。实验的内容分外的简单一串按钮通过编程了的EEPROM可以控制一串彩灯。然而选择了最low的一种一对一的控制模式,并很快按照实验指导书做完实验的yy马上感觉到十分无趣。于是他手指在一排按钮上无聊的滑来滑去,对应的彩灯也不断的变化着开关。已知每一个按钮按下会改变对应一个彩灯的状态,如此每次yy滑动都会改变一串彩灯的状态。现已知彩灯最初的状态,已经yy n次无聊的滑动的起点和终点l,r。现问彩灯最终的状态。
Input
有多组数据。
每组数据第一行,n(1<=n<=10^5)代表彩灯串长度,t(0<=t<=10^5)代表yy滑动的次数
第二行n个数(0表示灭1表示亮)给出n个彩灯的目前的状态。
之后t行每行两个数li,ri(1<=li<=ri<=n)代表每次滑动的区间。
Output
每组用一行输出最终的串的状态,格式见样例。
Sample Input
3 21 0 11 32 3
Sample Output
0 0 1
网上找的树状数组的模板,改改就好了
典型的改段求点问题
代码
#include<iostream>#include<cmath>#include<algorithm>#include<cstdio>#include<cstring>#include<iomanip>#include<queue>using namespace std;int C[100005];int light[100005];int a[100005];int N,M;int getsum(int x){ int sum=0; while(x>0) { sum+=C[x]; x-=(x&(-x)); } return sum;}void update(int x,int ad){ while(x<=N) { C[x]+=ad; x+=(x&(-x)); }}int main(){ int sta,last; while(~scanf("%d%d",&N,&M)) { memset(C,0,sizeof C); memset(light,0,sizeof light); for(int i=1;i<=N;i++) { scanf("%d",&a[i]); if(i==1) light[i]=a[i]; else light[i]=a[i]-a[i-1]; } for(int i=1;i<=N;i++) update(i,light[i]); for(int i=1;i<=M;i++) { scanf("%d%d",&sta,&last); update(sta,1); update(last+1,1); } cout<<getsum(1)%2; for(int i=2;i<=N;i++) cout<<" "<<getsum(i)%2; cout<<endl; } return 0;}
阅读全文
0 0
- csu1770: 按钮控制彩灯实验 (树状数组)
- CSU1770-按钮控制彩灯实验-线段树?
- CSUOJ 1770 按钮控制彩灯实验(树状数组 || 技巧)
- csu 1770 按钮控制彩灯实验(树状数组区间更新)
- CSU 1770 按钮控制彩灯实验
- CSU 1770 按钮控制彩灯实验
- CSUOJ-1770按钮控制彩灯实验(区间覆盖)
- arduino 红外控制彩灯
- arduino 用串口控制彩灯
- (转)树状数组
- 树状数组(转载)
- Stars(树状数组)
- 树状数组(interval)
- (转)树状数组
- 树状数组(2)
- 树状数组(3)
- 树状数组(4)
- 树状数组(5)
- 栈应用——中缀转后缀+后缀计算
- 2010-2011 ACM-ICPC, NEERC, Southern Subregional Contest【solved :8 / 12 】
- #515. 「LibreOJ β Round #2」贪心只能过样例
- BEMD算法及代码分享
- 无聊的函数(二分查找+数论)
- csu1770: 按钮控制彩灯实验 (树状数组)
- 面试前的一波复习
- <一> c++之虚函数
- BZOJ 3922: Karin的弹幕 线段树 暴力乱搞
- 销售凭证处理的User Exit
- 现在最火的深度学习框架是什么?
- hadoop学习笔记:Ubuntu下搭建eclipse调试环境
- 涂棋盘--网易2017春招实习笔试编程题9
- C#中改变显示器的分辨率