线段树--codevs 1690 开关灯
USACO
YYX家门前的街上有N(2<=N<=100000)盏路灯,在晚上六点之前,这些路灯全是关着的,六点之后,会有M(2<=m<=100000)个人陆续按下开关,这些开关可以改变从第i盏灯到第j盏灯的状态,现在YYX想知道,从第x盏灯到第y盏灯中有多少是亮着的(1<=i,j,x,y<=N)
第 1..询问总次数 行:对于每一次询问,输出询问的结果
4 5
0 1 2
0 2 4
1 2 3
0 2 4
1 1 4
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 开关灯的更多相关文章
- 线段树——codevs 1690 开关灯
先来一发题目: 1690 开关灯 时间限制: 1 s 空间限制: 128000 KB 题目描述 Description YYX家门前的街上有N(2<=N<=100000)盏路灯,在晚上六点 ...
- codevs 1690 开关灯 线段树+延迟标记
1690 开关灯 时间限制: 1 s 空间限制: 128000 KB 题目描述 Description YYX家门前的街上有N(2<=N<=100000)盏路灯,在晚上六点之前,这 ...
- codevs 1690 开关灯 线段树区间更新 区间查询Lazy
题目描述 Description YYX家门前的街上有N(2<=N<=100000)盏路灯,在晚上六点之前,这些路灯全是关着的,六点之后,会有M(2<=m<=100000)个人 ...
- Codevs 1690 开关灯 USACO
1690 开关灯 USACO 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description YYX家门前的街上有N(2<=N& ...
- codevs——1690 开关灯
1690 开关灯 USACO 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description YYX家门前的街上有N( ...
- RMQ 训练 之 codevs 1690 开关灯 已经搞定
思路 懒标记法 记stop[rt] 表示 rt这个线段树节点的下方儿子们需要被更新几次 记住是下方 量纲不要乱 否则写的一堆渣代码 我的代码里面black是维护黑灯的数量 其实做烦了 如果是维 ...
- codevs 1690 开关灯 线段树水题
没什么好说的,标记put表示开关是否开着. #include<cstdio> #include<cstring> #include<algorithm> using ...
- codevs 1082 线段树练习 3(区间维护)
codevs 1082 线段树练习 3 时间限制: 3 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...
- codevs 1576 最长上升子序列的线段树优化
题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...
随机推荐
- react 修改state某一属性值
1.state // 筛选框相关数据 searchSelect: { term: { value: '学期', key: '', options: [] }, type_of_personnel: { ...
- Coursera在线学习---第四节.过拟合问题
一.解决过拟合问题方法 1)减少特征数量 --人为筛选 --靠模型筛选 2)正则化(Regularization) 原理:可以降低参数Θ的数量级,使一些Θ值变得非常之小.这样的目的既能保证足够的特征变 ...
- perl6正则 6: 大小写/空白/匹配所有符合
这个 :g 只能写在外面 m:g /re/
- ThinkPHP的运行流程-2
Thinkphp为了提高编译的效率,第一次运行的时候thinkphp会把文件全部编译到temp目录下的~runtime.php文件,在第二次运行的时候会直接读取这个文件.所以我们在线下自己写代码测试的 ...
- Cesium 初始化Viewer
<pre name="code" class="javascript"><script> var viewer = new Cesium ...
- i8042 键盘控制器-------详细介绍
[转]http://shanzy.bokee.com/834368.html ps/2 键盘硬件概述 对于驱动来说,和键盘相关的最重要的硬件是两个芯片.一个是 intel 8042 芯片,位于主板上, ...
- python基础===对字符串进行左右中对齐
例如,有一个字典如下: >>> dic = { "name": "botoo", "url": "http:// ...
- 大数据系列之分布式数据库HBase-0.9.8安装及增删改查实践
若查看HBase-1.2.4版本内容及demo代码详见 大数据系列之分布式数据库HBase-1.2.4+Zookeeper 安装及增删改查实践 1. 环境准备: 1.需要在Hadoop启动正常情况下安 ...
- c++各种排序的简单实现
/* 直插排序 */ void InsertSort(vector<int> &arr){ for(int i = 1;i < arr.size();++i){ for(in ...
- Loadrunner下WebTours系统自带的用户名和密码
打开:http://127.0.0.1:1080/WebTours/ 系统默认自带两个用户名和密码,位于~\WebTours\MercuryWebTours\users: 1.用户名:joe,密码:y ...