codevs 1690 开关灯

USACO

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 钻石 Diamond
题目描述 Description

YYX家门前的街上有N(2<=N<=100000)盏路灯,在晚上六点之前,这些路灯全是关着的,六点之后,会有M(2<=m<=100000)个人陆续按下开关,这些开关可以改变从第i盏灯到第j盏灯的状态,现在YYX想知道,从第x盏灯到第y盏灯中有多少是亮着的(1<=i,j,x,y<=N)

输入描述 Input Description
第 1 行: 用空格隔开的两个整数N和M
第 2..M+1 行: 每行表示一个操作, 有三个用空格分开的整数: 指令号(0代表按下开关,1代表询问状态), x 和 y 
输出描述 Output Description

第 1..询问总次数 行:对于每一次询问,输出询问的结果

样例输入 Sample Input

4 5
0 1 2
0 2 4
1 2 3
0 2 4
1 1 4

样例输出 Sample Output
1
2
 /*没什么好说的,线段树的区间修改加区间查询*/
#define N 100100
#include<iostream>
using namespace std;
#include<cstdio>
#include<cstring>
struct Tree{
int sum,delta,l,r;
}tree[N*];
int n,m,a,x,y;
void update(int k)
{
int lch=k<<,rch=(k<<)+;
tree[k].sum=tree[lch].sum+tree[rch].sum;
}
void build_tree(int k,int l,int r)
{
tree[k].l=l;tree[k].r=r;
if(l==r)
{
tree[k].sum=tree[k].delta=;
return ;
}
int mid=(l+r)>>,lch=k<<,rch=(k<<)+;
build_tree(lch,l,mid);
build_tree(rch,mid+,r);
update(k);
}
void down(int k)
{
int lch=k<<,rch=(k<<)+;
tree[lch].delta+=tree[k].delta;
tree[lch].delta%=;
tree[lch].sum=(tree[lch].r-tree[lch].l+)-tree[lch].sum;
tree[rch].delta+=tree[k].delta;
tree[rch].delta%=;
tree[rch].sum=(tree[rch].r-tree[rch].l+)-tree[rch].sum;
tree[k].delta=;
}
void change(int k,int l,int r,int x,int y)
{
if(x<=l&&r<=y)
{
tree[k].delta++;
tree[k].delta%=;
tree[k].sum=(r-l+)-tree[k].sum;
return;
}
if(tree[k].delta)
down(k);
int mid=(l+r)>>,lch=k<<,rch=(k<<)+;
if(x<=mid)
change(lch,l,mid,x,y);
if(y>mid)
change(rch,mid+,r,x,y);
update(k);
}
int query(int k,int l,int r,int x,int y)
{
if(x<=l&&r<=y)
{
return tree[k].sum;
}
if(tree[k].delta)
down(k);
int mid=(l+r)>>,lch=k<<,rch=(k<<)+;
int ans=;
if(x<=mid)
ans+=query(lch,l,mid,x,y);
if(y>mid)
ans+=query(rch,mid+,r,x,y);
return ans;
}
int main()
{
scanf("%d%d",&n,&m);
build_tree(,,n);
for(int i=;i<=m;++i)
{
scanf("%d%d%d",&a,&x,&y);
if(a==)
{
change(,,n,x,y);
}
else printf("%d\n",query(,,n,x,y));
}
return ;
}

线段树--codevs 1690 开关灯的更多相关文章

  1. 线段树——codevs 1690 开关灯

    先来一发题目: 1690 开关灯 时间限制: 1 s 空间限制: 128000 KB 题目描述 Description YYX家门前的街上有N(2<=N<=100000)盏路灯,在晚上六点 ...

  2. codevs 1690 开关灯 线段树+延迟标记

    1690 开关灯  时间限制: 1 s  空间限制: 128000 KB   题目描述 Description YYX家门前的街上有N(2<=N<=100000)盏路灯,在晚上六点之前,这 ...

  3. codevs 1690 开关灯 线段树区间更新 区间查询Lazy

    题目描述 Description YYX家门前的街上有N(2<=N<=100000)盏路灯,在晚上六点之前,这些路灯全是关着的,六点之后,会有M(2<=m<=100000)个人 ...

  4. Codevs 1690 开关灯 USACO

    1690 开关灯 USACO 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description YYX家门前的街上有N(2<=N& ...

  5. codevs——1690 开关灯

    1690 开关灯 USACO  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Description YYX家门前的街上有N( ...

  6. RMQ 训练 之 codevs 1690 开关灯 已经搞定

    思路 懒标记法  记stop[rt] 表示 rt这个线段树节点的下方儿子们需要被更新几次  记住是下方 量纲不要乱  否则写的一堆渣代码 我的代码里面black是维护黑灯的数量 其实做烦了  如果是维 ...

  7. codevs 1690 开关灯 线段树水题

    没什么好说的,标记put表示开关是否开着. #include<cstdio> #include<cstring> #include<algorithm> using ...

  8. codevs 1082 线段树练习 3(区间维护)

    codevs 1082 线段树练习 3  时间限制: 3 s  空间限制: 128000 KB  题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...

  9. codevs 1576 最长上升子序列的线段树优化

    题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...

随机推荐

  1. textarea输入框随内容撑开高度

    原文链接 方法一(jquery): $('textarea').each(function () {  this.setAttribute('style', 'height:' + (this.scr ...

  2. UTF8字符串转换为汉字 c#

    using System; /// <summary> /// UTF8字符串转换为汉字用的类 /// 转换如"\\u8d35"之类的字符串为对应的汉字 /// < ...

  3. dlmalloc(一)【转】

    转自:http://blog.csdn.net/ycnian/article/details/12971863 我们写过很多C程序了,经常会分配内存.记得刚学C语言时老师说过,可以向两个地方申请内存: ...

  4. 浅析busybox如何集成到openwrt

    背景 近日添加了一个包到openwrt中,在此过程中又对openwrt多了一些认识 这个包本身自带了kconfig,可直接在这个包里面执行make menuconfig进行配置,然后执行make 但要 ...

  5. Tslib触摸屏官网【转】

    转自:https://github.com/kergoth/tslib C library for filtering touchscreen events tslib consists of the ...

  6. adb_usb.ini在adb找不到设备时

    不能连接不上adb,如下方法解决,步骤描述不愿意看的话,直接使用本文最下面的批处理命令,方法copy粘贴到新建的bat文件里运行,或者直接粘贴到dos窗口运行. 1. 使用androidsdk目录中的 ...

  7. HBase原理解析(转)

    本文属于转载,原文链接:http://www.aboutyun.com/thread-7199-1-1.html   前提是大家至少了解HBase的基本需求和组件. 从大家最熟悉的客户端发起请求开始讲 ...

  8. java版云笔记(九)之动态sql

    SQL 首先,所谓SQL的动态和静态,是指SQL语句在何时被编译和执行,二者都是用在SQL嵌入式编程中的,这里所说的嵌入式是指将SQL语句嵌入在高级语言中,而不是针对于单片机的那种嵌入式编程. 静态S ...

  9. Java-悲观锁和乐观锁

    Java中的乐观锁与悲观锁: 1. Java中典型的synchronized就是一种悲观锁,也就是独占锁,不过JDK1.6之后对synchronized已经做了许多优化,也不能说是完全的悲观锁了: 2 ...

  10. 高屋建瓴之WebMail攻与防

    0x01:前言 随着互联网的快速发展,我们的生活与互联网的联系愈加的紧密.各种快捷方便的信息化通信工具渐渐取代了传统的通信方式.微博.QQ.MSN.微信.陌陌, …这样的社交软件和平台已经成为了我们生 ...