usaco2008 nov 区间异或求和
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 区间异或求和的更多相关文章
- BZOJ 1230 [Usaco2008 Nov]lites 开关灯:线段树异或
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1230 题意: 有n盏灯,一开始全是关着的. 有m次操作(p,a,b).p为0,则将区间[a ...
- 1230: [Usaco2008 Nov]lites 开关灯
1230: [Usaco2008 Nov]lites 开关灯 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1162 Solved: 589[Sub ...
- NOJ——1669xor的难题(详细的树状数组扩展—异或求和)
[1669] xor的难题 时间限制: 1000 ms 内存限制: 65535 K 问题描述 最近Alex学长有个问题被困扰了很久,就是有同学给他n个数,然后给你m个查询,然后每个查询给你l和r(左下 ...
- bzoj 2819 Nim dfn序+树状数组维护区间异或值
题目大意 著名游戏设计师vfleaking,最近迷上了Nim.普通的Nim游戏为:两个人进行游戏,N堆石子,每回合可以取其中某一堆的任意多个,可以取完,但不可以不取.谁不能取谁输.这个游戏是有必胜策略 ...
- BZOJ 4017 小 Q 的无敌异或 ( 树状数组、区间异或和、区间异或和之和、按位计贡献思想 )
题目链接 题意 : 中文题 分析 : 首先引入两篇写的很好的题解 题解一.题解二 听说这种和异或相关区间求和的问题都尽量按位考虑 首先第一问.按二进制位计贡献的话.那么对于第 k 位而言 其贡献 = ...
- [Usaco2008 Nov]mixup2 混乱的奶牛 简单状压DP
1231: [Usaco2008 Nov]mixup2 混乱的奶牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 685 Solved: 383[S ...
- [BZOJ1618][Usaco2008 Nov]Buying Hay 购买干草
[BZOJ1618][Usaco2008 Nov]Buying Hay 购买干草 试题描述 约翰的干草库存已经告罄,他打算为奶牛们采购H(1≤H≤50000)磅干草. 他知道N(1≤N≤100)个干草 ...
- BZOJ 1620: [Usaco2008 Nov]Time Management 时间管理( 二分答案 )
二分一下答案就好了... --------------------------------------------------------------------------------------- ...
- BZOJ 1231: [Usaco2008 Nov]mixup2 混乱的奶牛( dp )
状压dp dp( x , S ) 表示最后一个是 x , 当前选的奶牛集合为 S , 则状态转移方程 : dp( x , S ) = Σ dp( i , S - { i } ) ( i ∈ S , ...
随机推荐
- 刷题总结——保留道路(ssoj)
题目: 题目背景 161114-练习-DAY1-AHSDFZ T3 题目描述 很久很久以前有一个国家,这个国家有 N 个城市,城市由 1,2,3,…,,N 标号,城市间有 M 条双向道路,每条道路都有 ...
- 【noip】noip201503求和(题解可能不完美,但绝对详细)
3. 求和 难度级别:B: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 题目描述 一条狭长的纸带被均匀划分出了n个格子,格子编号从1到n.每个格子 ...
- BZOJ [P2124] 等差子序列
线段树维护哈希值 要求出现长度大于三的等差子序列,我们只要找到长度等于三的就可以了 初看本题没有思路,只能暴力枚举,O(n^4) 后来发现,这个序列是n的一个排列,那么每个数字都只会出现一次 我们可以 ...
- Mac 快速修改 hosts 文件
sudo /Applications/TextEdit.app/Contents/MacOS/TextEdit /etc/hosts
- Powerdesigner 使用小技巧
1.table与table之间:改直角为直线; 2.Name 和code 不联动
- Day 13 Python 一之helloworld
直接肝程序吧! """ # 作业六:用户登录测试(三次机会) count = 1 while count <= 3: user = input('请输入用户名: ' ...
- Linux,以逗号为分隔符,打印文件file.txt中的第一个和第三个字符
https://zhidao.baidu.com/question/1883257355267391828.html
- 同时在windows和linux环境开发时换行符的处理
Git 的 core.autocrlf 參數默认为true,即每次 checkin 時,Git 會將純文字類型的檔案中的所有 CRLF 字元轉換為 LF,也就是版本庫中的換行符號一律存成 LF:在 c ...
- jpaRepository findById()数据库有数据却为null
oracle中的char类型用空格自动将字段补成指定的长度, 而varchar2类型不会.大部分情况下设计表字段类型都是varchar2,今天被char坑了一次, findById()始终为空..
- haproxy和nginx负载均衡分析
https://my.oschina.net/zhuangweihong/blog/813231