codevs1690开关灯
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#define maxn 100010
using namespace std;
int n,m,num;
struct node
{
int lc,rc;
int l,r;
int sum,bj;
}t[maxn*+];
void Build(int ll,int rr)
{
int k=++num;
t[k].l=ll;t[k].r=rr;
if(ll==rr)return;
t[k].lc=num+;
Build(ll,(ll+rr)/);
t[k].rc=num+;
Build((ll+rr)/+,rr);
}
void update(int k)
{
t[t[k].lc].sum=abs(t[t[k].lc].r-t[t[k].lc].l+-t[t[k].lc].sum);
t[t[k].rc].sum=abs(t[t[k].rc].r-t[t[k].rc].l+-t[t[k].rc].sum);
t[t[k].lc].bj=!t[t[k].lc].bj;
t[t[k].rc].bj=!t[t[k].rc].bj;
t[k].bj=;
}
void change(int k,int ll,int rr)
{
if(ll<=t[k].l&&rr>=t[k].r)
{
t[k].bj=!t[k].bj;
t[k].sum=abs(t[k].r-t[k].l+-t[k].sum);
return;
}
if(t[k].bj)update(k);
int mid=(t[k].l+t[k].r)/;
if(rr<=mid)change(t[k].lc,ll,rr);
else if(ll>mid)change(t[k].rc,ll,rr);
else
{
change(t[k].lc,ll,mid);
change(t[k].rc,mid+,rr);
}
t[k].sum=t[t[k].lc].sum+t[t[k].rc].sum;
}
int find(int k,int ll,int rr)
{
if(ll<=t[k].l&&rr>=t[k].r)return t[k].sum;
if(t[k].bj)update(k);
int ans=;
int mid=(t[k].l+t[k].r)/;
if(rr<=mid)ans+=find(t[k].lc,ll,rr);
else if(ll>mid)ans+=find(t[k].rc,ll,rr);
else ans+=find(t[k].lc,ll,mid)+find(t[k].rc,mid+,rr);
return ans;
}
int main()
{
scanf("%d",&n);
Build(,n);
scanf("%d",&m);
int x,y,z;
for(int i=;i<=m;i++)
{
scanf("%d",&x);
if(x==)
{
scanf("%d%d",&y,&z);
change(,y,z);
}
if(x==)
{
scanf("%d%d",&y,&z);
printf("%d\n",find(,y,z));
}
}
return ;
}
codevs1690开关灯的更多相关文章
- codevs1690 开关灯
1690 开关灯 USACO 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description YYX家门前的街上有N( ...
- codevs1690 开关灯(线段树)
1690 开关灯 USACO 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description YYX家门前的街上有N(2< ...
- 【codevs1690】开关灯 线段树 区间修改+区间求和(标记)
[codevs1690]开关灯 2014年2月15日4930 题目描述 Description YYX家门前的街上有N(2<=N<=100000)盏路灯,在晚上六点之前,这些路灯全是关着的 ...
- 【codevs1690】开关灯 (线段树 区间修改+区间求和 (标记))
[codevs1690]开关灯 2014年2月15日4930 题目描述 Description YYX家门前的街上有N(2<=N<=100000)盏路灯,在晚上六点之前,这些路灯全是关着的 ...
- 【codevs1690】开关灯 线段树
这道题需要支持区间修改和区间询问,因此采用线段树加以维护. 由于求的是开着的灯的数目,因此维护sum:区间[ l , r ]中开着的灯的数目. tag取做0/1,表示区间是否反转,在进行标记下传时,如 ...
- Code[VS]1690 开关灯 题解
Code[VS]1690 开关灯 题解 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description: YYX家门前 ...
- ckplayer播放器去掉右边的开关灯分享插件
在上一篇文章中介绍了如何使用ckplayer播放器,但是有的人不需要CK播放器右边的开关灯分享插件,那么就需要把该插件给去掉,方法也很简单. 第一步:先打开ckplayer.js里找到下面三行删除掉 ...
- 【wikioi】1690 开关灯(线段树)
http://wikioi.com/problem/1690/ 这题可不能算是水题了.. 在线段树中,我只想到了lazy改变,但是没想到lazy变后size怎么变,我的策略变成了lazy为0时size ...
- Codevs 1690 开关灯 USACO
1690 开关灯 USACO 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description YYX家门前的街上有N(2<=N& ...
随机推荐
- const关键字与指针
const与指针在一起的几种情况. const int *p1; //表示p1本身不是const,指向的变量是const. const *int p2; //语法错误 int const *p3; / ...
- ASP.NET MVC轻教程 Step By Step 2 ——View初探
在上一节我们完成了一个最简化的MVC程序,最重要的是下面这段代码. public class HomeController : Controller { public string Index() { ...
- C++例题2:汉诺塔问题
#include<iostream>#include<stdlib.h>using namespace std;void Hanoi(int n,char A,char B,c ...
- hibernate 一张数据表的流程
1. 写一个domain类来映射数据库表 2. 写一个*.hbm.xml文件来配置映射 <?xml version="1.0"?> <!DOCTYPE hiber ...
- ECMAScript 6 模块简介
任何平台的其中一个重要特性,除了需要支持代码库外就是模块.直到现在,Javascript还不支持原生的模块化.结果是,各种解决方案都将模块添加到类库中,比如CommonJS modules(部分由no ...
- 正则表达式:根据逗号解析CSV并忽略引号内的逗号
需求:解析CSV文件并忽略引号内的逗号 解决方案: public static void main(String[] args) { String s = "a,b,c,\"1,0 ...
- Unity3d Web3d资源的动态加载
Unity3d Web3d资源的动态加载 @灰太龙 参考了宣雨松的博客,原文出处http://www.xuanyusong.com/archives/2405,如果涉及到侵权,请通知我! Unity3 ...
- Building a Space Station
poj2031:http://poj.org/problem?id=2031 题意:就是给出三维坐标系上的一些球的球心坐标和其半径,搭建通路,使得他们能够相互连通.如果两个球有重叠的部分则算为已连通, ...
- keil MDK启动文件分析---基于LPC2100系列(其实都是相通的)
转用MDK有一段时间了,越来越觉得MDK的强大,因为我之前都是用ADS1.2开发产品,所以更能体会到MDK的强大与易用性.MDK编译出来的代码与ADS1.2相比,代码量减少了很多,我的一个工程用ADS ...
- 通用GPIO模拟串口,提供源代码,本人经过测试OK(第一版)
--------------------------serial.h------------------------------------------ #ifndef _SERIAL_H_ #def ...