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& ...
随机推荐
- Object.defineProperty 规则
- (转载)50个c/c++源代码网站
C/C++是最主要的编程语言.这里列出了50名优秀网站和网页清单,这些网站提供c/c++源代码.这份清单提供了源代码的链接以及它们的小说明.我已 尽力包括最佳的C/C++源代码的网站.这不是一个完整的 ...
- H3C S5500上层接路由,VLAN IP作网站配置实例
# version 5.20, Release 2208 # sysname S5500-1 # clock timezone #Web#8#01 add 08:00:00 # super passw ...
- hdu-4638-Group(树状数组)
题意 找到区间里有多少组连续数字串 分析: (转)思路:显然,我们要使得value最大,就要尽量将连续的ID分在一组,所以问题转化为求一个区间中连续ID区间的个数.我们从左往右扫描,依次考虑右端点为i ...
- oracle 表查询(1)
oracle 表基本查询 介绍在我们讲解的过程中我们利用scott 用户存在的几张表(emp,dept)为大家演示如何使用select语句,select 语句在软件编程中非常有用,希望大家好好的掌握. ...
- IIS的安装与配置
IIS的安装与配置 5.1.1. IIS安装视频教程 5.1.2. IIS配置与建站设置视频教程 IIS是什么 IIS是Internet Information Services(Internet信息 ...
- win7使用USB转串口连接mini2440方法
不想嚼别人吃剩的馍.我只说我自己是怎么痛苦的连上的. 环境设备: window7笔记本,没有串口,装有XP和Ubuntu2个虚拟机(不是必须的,我只是说明一下我的环境) 友善之臂mini2440(含U ...
- VMware宿主机和虚拟机的网络连接问题
今天在win8上装了个vmware虚拟机,却发现一个vmware workstation宿主机ping不通centos虚拟机,宿主机和centos虚拟机都可以正常上网. 问题描述:今天在vmware ...
- 在javaweb中通过servlet类和普通类读取资源文件
javaweb有两种方式读取资源文件 在Servlet中读取,可以使用servletContext,servletContext可以拿到web所有的资源文件,然后随便读,但是这种方法不常用,尽量少在S ...
- iOS中UITableView的cell点击事件不触发didSelectRowAtIndexPath(汇总)
iOS中UITableView的cell点击事件不触发didSelectRowAtIndexPath 首先分析有几种原因,以及相应的解决方法 1.UITableViewCell的userInterac ...