嗯嗯,这是一道线段树的题,询问区间内亮着的灯的个数,我们可以把区间修改的线段树改一下,原本的求和改成若有奇数次更改则取反(总长度-亮着的灯个数),而判断是否奇数次只要数组加一个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. angular $apply()以及$digest()讲解1

    一些知名的批评和缺陷.他们都涉及到$digest loop(更新周期)中一个很常见的问题:如何在Angular之外更新$scope? 在哪调用 $apply? 更佳的做法是确保你是在$digest l ...

  2. 再论App的安全性

    现代人早已脱离不了智能手机,几乎人手一机,常见人边走边滑,着实危险.大家用手机App购物,用网银App付费,用股票App下单炒股,太方便了所以成了家常便饭. 没错,就是因为太方便,所以大多只会留意好不 ...

  3. Linux之samba搭建

    参考资料: http://www.cnblogs.com/mchina/archive/2012/12/18/2816717.html

  4. HTML与XHTML的区别

    为什么要使用XHTML? 我们认为万维网上的许多页面都包含着糟糕的 HTML 代码. 下面的 HTML 代码仍然可以工作得很好,即使它没有遵守 HTML 规则: <html> <he ...

  5. android中关闭软键盘

    /**隐藏软键盘**/ View view = getWindow().peekDecorView(); if (view != null) { InputMethodManager inputman ...

  6. Jquery 利用单个复选款(checkbox)实现全选、反选

    1 <script type="text/javascript"> $(function(){ //全选 $("#CheckedAll").clic ...

  7. [leetcode]_Remove Duplicates from Sorted Array II

    题目:一个有序数组,要求保证数组中的每个元素不能超过2个.  输入:A = [1,1,1,2,2,3]  输出:length = 5, and A is now [1,1,2,2,3] 思路:双指针 ...

  8. Lucene全文检索框架

    1.什么时Lucene? 是一个全文搜索框架,而不是应用产品,他只是一种工具让你能实现某些产品,并不像www.baidu.com拿来就能用 是apache组织的一个用java实现的全文搜索引擎的开源项 ...

  9. jQuery在IE7和8下setInterval失效的问题

    原因不在于setInterval,而是IE的缓存造成ajax请求页没有更新的问题. 在请求的url中加入一个随机数参数即可. var CheckPaied = function (transactio ...

  10. 【原】SBT构建Scala应用

    [转帖] 原文地址:https://github.com/CSUG/real_world_scala/blob/master/02_sbt.markdown 尊重版权,尊重他人劳动成果,转帖请注明原文 ...