嗯嗯,这是一道线段树的题,询问区间内亮着的灯的个数,我们可以把区间修改的线段树改一下,原本的求和改成若有奇数次更改则取反(总长度-亮着的灯个数),而判断是否奇数次只要数组加一个delta的值,update的时候delta xor 1 就够了,代码如下。

 type
tpoint=record
l,r,sum,delta,mid:longint;
end;
var n,m,s,e,i,j,c,sum:longint;
tree:array[..] of tpoint;
procedure build(x,l,r:longint);
begin
tree[x].l:=l; tree[x].r:=r; tree[x].sum:=; tree[x].delta:=; tree[x].mid:=(l+r) shr ;
if l>=r then exit;
build(x*,l,(l+r) shr );
build(x*+,((l+r) shr )+,r);
end;
procedure maitain(x:longint);
begin
tree[x].sum:=;
if tree[x].l<tree[x].r then
tree[x].sum:=tree[x*].sum+tree[x*+].sum;
tree[x].sum:=abs(tree[x].delta*(tree[x].r-tree[x].l+)-tree[x].sum);
end;
procedure insert(x:longint);
begin
if (s<=tree[x].l) and (tree[x].r<=e) then tree[x].delta:=tree[x].delta xor
else begin
if s<=tree[x].mid then insert(x*);
if e>tree[x].mid then insert(x*+);
end;
maitain(x);
end;
procedure query(x,add:longint);
begin
if (s<=tree[x].l) and (tree[x].r<=e) then
sum:=sum+abs(add*(tree[x].r-tree[x].l+)-tree[x].sum)
else begin
if s<=tree[x].mid then query(x*,add xor tree[x].delta);
if e>tree[x].mid then query(x*+,add xor tree[x].delta);
end;
end;
begin
readln(n,m);
build(,,n);
for i:= to m do
begin
readln(c,s,e);
sum:=;
if c= then insert()
else begin
query(,);
writeln(sum);
end;
end;
end.

(转载请注明出处:http://www.cnblogs.com/Kalenda/)

P1230: [Usaco2008 Nov]lites 开关灯的更多相关文章

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

    线段树.. --------------------------------------------------------------------------------- #include< ...

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

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

  3. BZOJ1230 [Usaco2008 Nov]lites 开关灯

    区间not,求区间1的个数...线段树裸题 然而窝并不会线段树 我们可以对序列分块,每个块记录0/1的个数和tag表示又没有区间not过就好了 /*************************** ...

  4. bzoj:1230: [Usaco2008 Nov]lites 开关灯

    Description Farmer John尝试通过和奶牛们玩益智玩具来保持他的奶牛们思维敏捷. 其中一个大型玩具是牛栏中的灯. N (2 <= N <= 100,000) 头奶牛中的每 ...

  5. 【线段树】Bzoj1230 [Usaco2008 Nov]lites 开关灯

    Description Farmer John尝试通过和奶牛们玩益智玩具来保持他的奶牛们思维敏捷. 其中一个大型玩具是牛栏中的灯. N (2 <= N <= 100,000) 头奶牛中的每 ...

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

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

  7. bzoj 1230: [Usaco2008 Nov]lites 开关灯【线段树】

    在线段树上记录长度.区间01翻转标记.当前1个数.传递tag的时候用长度-1个数即可 #include<iostream> #include<cstdio> using nam ...

  8. B1230 [Usaco2008 Nov]lites 开关灯 线段树

    就是线段树维护异或和.之前我线段树区间修改down都是修改当前区间,结果debug出不来,改成每次向下了. 题干: Description Farmer John尝试通过和奶牛们玩益智玩具来保持他的奶 ...

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

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

随机推荐

  1. WP8_读写XML

    /// <summary> /// WP手机,XML读写类 /// </summary> public class WPXmlRW { /// <summary> ...

  2. CDbConnectionExt.php 23.2实现数据库的主从分离,该类会维护多个数据库的配置:一个主数据库配置,多个从数据库的配置

      <?php   /** * 实现数据库的主从分离,该类会维护多个数据库的配置:一个主数据库配置,多个从数据库的配置. * 具体使用主数据库还是从数据库,使用如下规则: * 1.CDbComm ...

  3. curl 取不到第二个参数解决方法

    curl http://127.0.0.1:8083/search/add_index_quan_bc?option=1&channelId=139 在Linux下执行这个命令,观察日志发现, ...

  4. iOS取证将如漫漫长夜

    日前因恐攻一案,FBI对一支已上锁的iPhone 5c束手无策,美国法院出具命令要求苹果配合,但被苹果公司执行长库克以维护安全及隐私为由悍然拒绝. 平心而论,各有其立场,但在一个犯罪案件之中,真的可以 ...

  5. javascript之值传递与引用传递

    在分析这个问题之前,我们需了解什么是按值传递(call by value),什么是按引用传递(call by reference).在计算机科学里,这个部分叫求值策略(Evaluation Strat ...

  6. PHP 统计中文字符串的长度

    中文网站一般会选择两种编码:gbk/gb2312或是utf-8. gbk编码下每个中文字符所占字节为2,例: $zhStr = ‘您好,中国!’; echo strlen($zhStr); // 输出 ...

  7. OpenJudge 2809 计算2的N次方

    1.链接地址: http://bailian.openjudge.cn/practice/2809/ 2.题目: 总时间限制: 1000ms 内存限制: 65536kB 描述 任意给定一个正整数N(N ...

  8. C puzzles详解【6-8题】

    第六题 #include<stdio.h> int main() { ; switch(a) { ': printf("ONE\n"); break; ': print ...

  9. ThinkPHP5中Session的使用

    由于用惯了ThinkPHP之前的版本,一想到要用Session就直接用$_SESSION来存取,今天看了ThinkPHP5的手册,才发现原来这么用时不安全滴.ThinKPHP5对Session进行了封 ...

  10. C#实现图书馆程序导入ISO-2709格式(MARC)功能

    1.导入 /// <summary> /// 导入ISO2709 /// </summary> /// <param name="sender"> ...