线段树--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] .根 ...
随机推荐
- 爬虫--selenium
什么是selenium? 基本使用 from selenium import webdriver from selenium.webdriver.common.by import By from se ...
- MSSQL ADO.NET
为什么要学ADO.NET 之前我们所学的只能在查询分析器里查看数据,操作数据,我们让普通用户去学sql,所以我们搭建了一个界面(Web/Winform) 让用户方面的操作数据库中的数据 什么是ADO. ...
- Traffic-Server配置(待补充和更新)
Server 5.3.2 测试1.裸盘:remap.configmap http://192.168.227.131 http://192.168.227.131:8080 #traffic_serv ...
- linux下的僵尸进程处理SIGCHLD信号【转】
转自:http://www.cnblogs.com/wuchanming/p/4020463.html 什么是僵尸进程? 首先内核会释放终止进程(调用了exit系统调用)所使用的所有存储区,关闭所有打 ...
- MessageDigest类实现md5加密
项目中用到的md5工具类: package com.mall.util; import org.springframework.util.StringUtils; import java.securi ...
- selenium grid应用2-多节点执行用例
启动远程 node我们目前启动的 Hub 与 node 都是在一台主机.那么要在其它主机启动 node 必须满足以下几个要求: 1)本地 hub 主机与远程 node 主机之间可以相互 ping 通 ...
- Effective C++笔记(三):资源管理
参考:http://www.cnblogs.com/ronny/p/3745098.html 资源:动态分配的内存.文件描述器.互斥锁.图形界面中的字型与笔刷.数据库连接以及网络sockets等, ...
- Educational Codeforces Round 25 D - Suitable Replacement(贪心)
题目大意:给你字符串s,和t,字符串s中的'?'可以用字符串t中的字符代替,要求使得最后得到的字符串s(可以将s中的字符位置两两交换,任意位置任意次数)中含有的子串t最多. 解题思路: 因为知道s中的 ...
- plsPlugin
init: 监控目录变化(增删) 监控jar变化,load
- Delphi idHttpServer接收Http Get请求解码问题
引用 Httpapp单元,使用Httpdecode函数进行解码 procedure TFrmMain.HTTPServerCommandGet(AThread: TIdPeerThread; AReq ...