Problem 11: Switching Lights [LongFan, 2008]

Farmer John tries to keep the cows sharp by letting them play with
intellectual toys. One of the larger toys is the lights in the barn.
Each of the N (2 <= N <= 500) cow stalls conveniently numbered
1..N has a colorful light above it. At the beginning of the evening, all the lights are off. The cows
control the lights with a set of N pushbutton switches that toggle
the lights; pushing switch i changes the state of light i from off
to on or from on to off. The cows read and execute a list of M (1 <= M <= 2,000) operations
expressed as one of two integers (0 <= operation <= 1). The first operation (denoted by a 0 command) includes two subsequent
integers S_i and E_i (1 <= S_i <= E_i <= N) that indicate a starting
switch and ending switch. They execute the operation by pushing
each pushbutton from S_i through E_i inclusive exactly once. The second operation (denoted by a 1 command) asks the cows to count
how many lights are on in the range given by two integers S_i and
E_i (1 <= S_i <= E_i <= N) which specify the inclusive range in
which the cows should count the number of lights that are on. Help FJ ensure the cows are getting the correct answer by processing
the list and producing the proper counts. PROBLEM NAME: swtch INPUT FORMAT: * Line 1: Two space-separated integers: N and M * Lines 2..M+1: Each line represents an operation with three
space-separated integers: operation, S_i, and E_i SAMPLE INPUT (file swtch.in): 4 5
0 1 2
0 2 4
1 2 3
0 2 4
1 1 4 INPUT DETAILS: Four lights; five commands. Here is the sequence that should
be processed:
Lights
1 2 3 4
Init: O O O O O = off * = on
0 1 2 -> * * O O toggle lights 1 and 2
0 2 4 -> * O * *
1 2 3 -> 1 count the number of lit lights in range 2..3
0 2 4 -> * * O O toggle lights 2, 3, and 4
1 1 4 -> 2 count the number of lit lights in the range 1..4 OUTPUT FORMAT: * Lines 1..number of queries: For each output query, print the count
as an integer by itself on a single line. SAMPLE OUTPUT (file swtch.out): 1
2
就是一开始所有的灯是灭着的,然后.... 可以用线段树解决
/* ***********************************************
Author :guanjun
Created Time :2015/10/4 15:30:49
File Name :1.cpp
************************************************ */
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <stdio.h>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <iomanip>
#include <list>
#include <deque>
#include <stack>
#define ull unsigned long long
#define ll long long
#define mod 90001
#define INF 0x3f3f3f3f
#define maxn 100000+10
#define cle(a) memset(a,0,sizeof(a))
#define ls i<<1
#define rs i<<1|1
const ull inf = 1LL << ;
const double eps=1e-;
using namespace std;
struct node{
int l,r,c;
int sum;
int dist(){
return r-l+;
}
}nod[maxn*];
void push_up(int i){
nod[i].sum=nod[ls].sum+nod[rs].sum;
}
void push_down(int i){
if(nod[i].c){
nod[ls].c^=;
nod[rs].c^=;
nod[ls].sum=nod[ls].dist()-nod[ls].sum;
nod[rs].sum=nod[rs].dist()-nod[rs].sum;
nod[i].c=;
}
}
void build(int i,int l,int r){
nod[i].l=l;
nod[i].r=r;
nod[i].c=nod[i].sum=;
if(l==r){
return ;
}
int mid=(l+r)/;
build(ls,l,mid);
build(rs,mid+,r);
push_up(i);
}
void update(int i,int l,int r){
if(nod[i].l==l&&nod[i].r==r){
nod[i].c^=;
nod[i].sum=nod[i].dist()-nod[i].sum;
return ;
}
push_down(i);
int mid=(nod[i].l+nod[i].r)/;
if(r<=mid)update(ls,l,r);
else if(l>mid)update(rs,l,r);
else {
update(ls,l,mid);
update(rs,mid+,r);
}
push_up(i);
}
int query(int i,int l,int r){
if(nod[i].l==l&&nod[i].r==r){
return nod[i].sum;
}
push_down(i);
int mid=(nod[i].l+nod[i].r)/;
//int sum=0;
if(r<=mid)return query(ls,l,r);
else if(l>mid)return query(rs,l,r);
else return query(ls,l,mid)+query(rs,mid+,r);
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
#endif
//freopen("out.txt","w",stdout);
int n,m,po,x,y;
while(cin>>n>>m){
build(,,n);
for(int j=;j<=m;j++){
scanf("%d%d%d",&po,&x,&y);
if(po==)update(,x,y);
else printf("%d\n",query(,x,y));
}
}
return ;
}

 数据 http://contest.usaco.org/TESTDATA/NOV08_1.htm

usaco2008 nov 区间异或求和的更多相关文章

  1. BZOJ 1230 [Usaco2008 Nov]lites 开关灯:线段树异或

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1230 题意: 有n盏灯,一开始全是关着的. 有m次操作(p,a,b).p为0,则将区间[a ...

  2. 1230: [Usaco2008 Nov]lites 开关灯

    1230: [Usaco2008 Nov]lites 开关灯 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1162  Solved: 589[Sub ...

  3. NOJ——1669xor的难题(详细的树状数组扩展—异或求和)

    [1669] xor的难题 时间限制: 1000 ms 内存限制: 65535 K 问题描述 最近Alex学长有个问题被困扰了很久,就是有同学给他n个数,然后给你m个查询,然后每个查询给你l和r(左下 ...

  4. bzoj 2819 Nim dfn序+树状数组维护区间异或值

    题目大意 著名游戏设计师vfleaking,最近迷上了Nim.普通的Nim游戏为:两个人进行游戏,N堆石子,每回合可以取其中某一堆的任意多个,可以取完,但不可以不取.谁不能取谁输.这个游戏是有必胜策略 ...

  5. BZOJ 4017 小 Q 的无敌异或 ( 树状数组、区间异或和、区间异或和之和、按位计贡献思想 )

    题目链接 题意 : 中文题 分析 : 首先引入两篇写的很好的题解 题解一.题解二 听说这种和异或相关区间求和的问题都尽量按位考虑 首先第一问.按二进制位计贡献的话.那么对于第 k 位而言 其贡献 = ...

  6. [Usaco2008 Nov]mixup2 混乱的奶牛 简单状压DP

    1231: [Usaco2008 Nov]mixup2 混乱的奶牛 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 685  Solved: 383[S ...

  7. [BZOJ1618][Usaco2008 Nov]Buying Hay 购买干草

    [BZOJ1618][Usaco2008 Nov]Buying Hay 购买干草 试题描述 约翰的干草库存已经告罄,他打算为奶牛们采购H(1≤H≤50000)磅干草. 他知道N(1≤N≤100)个干草 ...

  8. BZOJ 1620: [Usaco2008 Nov]Time Management 时间管理( 二分答案 )

    二分一下答案就好了... --------------------------------------------------------------------------------------- ...

  9. BZOJ 1231: [Usaco2008 Nov]mixup2 混乱的奶牛( dp )

    状压dp dp( x , S ) 表示最后一个是 x , 当前选的奶牛集合为 S , 则状态转移方程 : dp( x , S ) =  Σ dp( i , S - { i } )  ( i ∈ S , ...

随机推荐

  1. W3 School学习网站

    http://www.w3school.com.cn/ 领先的 Web 技术教程 - 全部免费 在 w3school,你可以找到你所需要的所有的网站建设教程. 从基础的 HTML 到 CSS,乃至进阶 ...

  2. ElasticSearch API 之 DELETE

    删除API,可以根据特定的ID删除文档. $ curl -XDELETE 'http://localhost:9200/website/blog/AVbkih8AltSLRRB7XAun' 会返回下面 ...

  3. UVa10539

    http://vjudge.net/problem/UVA-10539 先打出来sqrt(n)以内的素数表,然后对于每个素数x,他对答案的贡献就是最大的p使x^p<=n,即log(x,n).注意 ...

  4. 在 VirtualBox 5.0 系列中让虚拟机支持 USB 3.0 必须开启 APIC

    VirtualBox 5.0 系列正式支持 USB 3.0,能够在宿主机支持 USB 3.0 的情况下,让虚拟机也选择具备 USB 3.0 的功能.但是经过多方试验,发现必须在 VirtualBox ...

  5. css3 nth-child 与 nth-of-type 的区别

    by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=1709 一.深呼吸,直 ...

  6. C# 读写bat文件

    读: var batFile = "D:\\test.bat"; if (File.Exists(batFile)) { using (var sr = new StreamRea ...

  7. android EditText禁止复制粘贴完整代码

    <!-- 定义基础布局LinearLayout --> <LinearLayout xmlns:android="http://schemas.android.com/ap ...

  8. linxu下的shell脚本加密,shell生成二机制可执行文件

    再安全的加密也抵不过逆向,斗智斗勇吧,持续加密持续破解 1.简单的加密:gzexe file.sh 2.使用shc加密:下载地址:http://www.datsi.fi.upm.es/~frosal/ ...

  9. JNI之—— Eclipse配置C/C++开发环境

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46622173 开发环境:Eclipse3.2.CDT3.1.MinGW5.1 1. ...

  10. vs2015使用Git管理项目

    初级 1,在码云上去注册一个帐号(码云的私有库是免费的,安全性怎么样我不知道) 2,在码云上新建一个项目,把相关的开发人员加到这个项目里,会得到这个项目在码云上的远程仓库的地址. 3,打开vs2015 ...