A - 按钮控制彩灯实验 Time Limit:1000MS Memory Limit:131072KB 64bit IO Format:%lld & %llu Submit
Status 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 2 1 0 1 1 3 2 3 Sample Output 0 0 1
//http://blog.csdn.net/nameofcsdn/article/details/52189851 //从楼上的连接中学习的 上面还有树状数组解法 #include<stdio.h> #include<string> #include<cstring> #include<queue> #include<algorithm> #include<functional> #include<vector> #include<iomanip> #include<math.h> #include<iostream> #include<sstream> #include<set> #include<map> using namespace std; const int MAX=100005; int A[MAX],F[MAX]; int main() { int N,T,a,b; while (scanf("%d%d",&N,&T)!=EOF) { memset(F,0,sizeof(F)); for (int i=1; i<=N; i++) scanf("%d",&A[i]); for (int i=1; i<=T; i++) { scanf("%d%d",&a,&b); F[a]++,F[b+1]++; } for (int i=1; i<=N; i++) { F[i]+=F[i-1]; if (F[i]%2==1) printf("%d",A[i]^1); else printf("%d",A[i]); if (i<N) printf(" "); else printf("\n"); } } return 0; }