P5057 [CQOI2006]简单题
题目描述
有一个 n 个元素的数组,每个元素初始均为 0。有 m 条指令,要么让其中一段连续序列数字反转——0 变 1,1 变 0(操作 1),要么询问某个元素的值(操作 2)。 例如当 n = 20 时,10 条指令如下:

输入输出格式
输入格式:
第一行包含两个整数 n, m,表示数组的长度和指令的条数; 以下 m 行,每行的第一个数 t 表示操作的种类:
若 t = 1,则接下来有两个数 L, R,表示区间 [L, R] 的每个数均反转; 若 t = 2,则接下来只有一个数 i,表示询问的下标。
输出格式:
每个操作 2 输出一行(非 0 即 1),表示每次操作 2 的回答。
输入输出样例
20 10
1 1 10
2 6
2 12
1 5 12
2 6
2 15
1 6 16
1 11 17
2 12
2 6
1
0
0
0
1
1
说明
对于 50% 的数据,1 ≤ n ≤ 10^3, 1 ≤ m ≤ 10^4; 对于 100% 的数据,1 ≤ n ≤ 10^5, 1 ≤ m ≤ 5 × 10^5,保证 L ≤ R。
线段树的区间修改,单点查询,似乎并不用建树,建树好像还有问题
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+;
int xxoo[maxn];
int n,m,L,R,opt,x;
void pushdown(int now)
{
if(xxoo[now])
{
xxoo[now*]^=;
xxoo[now*+]^=;
xxoo[now]=;
}
}
void modify(int now,int l,int r,int stdl,int stdr)
{
if(stdl>=l&&stdr<=r)
{
xxoo[now]^=;
return;
}
pushdown(now);
int mid=(stdl+stdr)>>;
if(l<=mid)
{
modify(now<<,l,r,stdl,mid);
}
if(r>mid)
{
modify(now<<|,l,r,mid+,stdr);
}
}
int query(int now,int x,int stdl,int stdr)
{
if(stdl==stdr)
{
return xxoo[now];
}
pushdown(now);
int mid=(stdl+stdr)>>;
if(x<=mid)
{
return query(now<<,x,stdl,mid);
}
else
{
return query(now<<|,x,mid+,stdr);
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
scanf("%d",&opt);
if(opt==)
{
scanf("%d%d",&L,&R);
modify(,L,R,,n);
}
else
{
scanf("%d",&x);
printf("%d\n",query(,x,,n));
}
}
return ;
}
错误代码(多了一个建树)
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+;
struct node
{
int l;
int r;
int lazyxor;
int value;
int sum;
}tree[maxn*];
int n,m,L,R,opt,x;
void build(int now,int l,int r)
{
tree[now].l=l;
tree[now].r=r;
tree[now].lazyxor=;
if(l==r)
{
tree[now].value=tree[now].sum=;
return;
}
int mid=(l+r)>>;
build(now<<,l,mid);
build(now<<|,mid+,r);
tree[now].sum=tree[now*].sum+tree[now*+].sum;
}
void pushdown(int now)
{
if(tree[now].lazyxor)
{
tree[now*].lazyxor^=;
tree[now*+].lazyxor^=;
tree[now].lazyxor=;
}
}
void modify(int now,int l,int r)
{
if(tree[now].l>=l&&tree[now].r<=r)
{
tree[now].lazyxor^=;
return;
}
pushdown(now);
int mid=(tree[now].l+tree[now].r)>>;
if(l<=mid)
{
modify(now<<,l,mid);
}
if(r>mid)
{
modify(now<<|,mid+,r);
}
}
int query(int now,int x,int l,int r)
{
if(tree[now].l==tree[now].r)
{
return tree[now].lazyxor;
}
pushdown(now);
int mid=(tree[now].l+tree[now].r)>>;
if(x<=mid)
{
return query(now*,x,l,r);
}
else
{
return query(now*+,x,l,r);
}
}
int main()
{
scanf("%d%d",&n,&m);
build(,,n);
for(int i=;i<=m;i++)
{
scanf("%d",&opt);
if(opt==)
{
scanf("%d%d",&L,&R);
modify(,L,R);
}
else
{
scanf("%d",&x);
printf("%d\n",query(,x,,n));
}
}
return ;
}
P5057 [CQOI2006]简单题的更多相关文章
- 洛谷 P5057 [CQOI2006]简单题 题解
P5057 [CQOI2006]简单题 题目描述 有一个 n 个元素的数组,每个元素初始均为 0.有 m 条指令,要么让其中一段连续序列数字反转--0 变 1,1 变 0(操作 1),要么询问某个元素 ...
- P5057 [CQOI2006]简单题(线段树)
果然简单题,5分钟紫题++ 代码 #include <cstdio> #include <algorithm> #include <cstring> using n ...
- 洛谷P5057 [CQOI2006]简单题(线段树)
题意 题目链接 Sol 紫色的线段树板子题??... #include<iostream> #include<cstdio> #include<cmath> usi ...
- 洛谷 P5057 [CQOI2006]简单题(树状数组)
嗯... 题目链接:https://www.luogu.org/problem/P5057 首先发现这道题中只有0和1,所以肯定与二进制有关.然后发现这道题需要支持区间更改和单点查询操作,所以首先想到 ...
- 洛谷 P5057 [CQOI2006]简单题 (树状数组,位运算)
题意:有一个长度为\(n\)的数组,进行\(m\)次操作,每次读入一个值\(t\),如果\(t=1\),则将区间\([l,r]\)的数字反转,若\(t=2\),则查询下标为\(i\)的值. 题解:树状 ...
- [洛谷P5057][CQOI2006]简单题
题目大意:有一个长度为$n$的$01$串,两个操作: $1\;l\;r:$把区间$[l,r]$翻转($0->1,1->0$) $2\;p:$求第$p$位是什么 题解:维护前缀异或和,树状数 ...
- P5057 [CQOI2006]简单题 前缀异或差分/树状数组
好思路,好思路... 思路:前缀异或差分 提交:1次 题解:区间修改,单点查询,树状数组,如思路$qwq$ #include<cstdio> #include<iostream> ...
- P5057 【[CQOI2006]简单题】
洛谷P5057[CQOI2006]简单题 差分 树状数组基本操作不说了,主要想记录一下异或下的差分 a数组为每一位的真实值(假设\(a[0]=0\)),t为差分后的数组 则\(t[i]=a[i]\)^ ...
- 「CQOI2006」简单题 线段树
「CQOI2006」简单题 线段树 水.区间修改,单点查询.用线段树维护区间\([L,R]\)内的所有\(1\)的个数,懒标记表示为当前区间是否需要反转(相对于区间当前状态),下方标记时懒标记取反即可 ...
随机推荐
- 【Python3爬虫】教你怎么利用免费代理搭建代理池
一.写在前面 有时候你的爬虫刚开始的时候可以正常运行,能够正常的爬取数据,但是过了一会,却出现了一个“403 Forbidden",或者是”您的IP访问频率太高“这样的提示,这就意味着你的I ...
- Python input保证输入为int类型
t = float(input("t(℃)="))
- spring beans源码解读之--总结篇
spring beans下面有如下源文件包: org.springframework.beans, 包含了操作java bean的接口和类.org.springframework.beans.anno ...
- 斑马打印机的安装调试,生成PDF
1. 我使用的斑马打印机GK888T.有问题打客服,耐心等待.售后电话4006456456得到了解决. 2. 我遇到的问题是打印一张之后指示灯变为红灯,时好时坏.解决方案,长按指示键,待指示灯连续 ...
- 关于时间的那些事--PHP、JavaScript、MySQL操作时间
PHP篇 PHP中时间操作单位是秒 一.将时间戳转为普通日期格式 //当前时间戳 time(); //当前时间格式 date("Y-m-d H:i:s",time()); //昨天 ...
- Spring中关于AOP的实践之AspectJ方式实现通知
(本文中如有不当之处,恳请批评指正) AspectJ方式的简化了通知的出现复杂度.但是对配置文件的操作复杂度有了一定的提升 一. 配置通知 package com.xkx.adviceDemo; im ...
- 微信h5 video的问题
https://blog.csdn.net/hf123lsk/article/details/78920211
- element表格添加查看操作
表格代码:黄色部分关键代码 首先看效果: <el-table :data="tableData" border height="480" style=&q ...
- .net开源工作流ccflow从表数据数据源导入设置
第1节. 关键字 驰骋工作流引擎 流程快速开发平台 workflow ccflow jflow .net开源工作流 第2节. 从表数据导入设置 1.1.1: 概要说明 在从表的使用中我一般都会用到从 ...
- arcgis api for js入门开发系列十九图层在线编辑
本篇主要讲述的是利用arcgis api实现图层在线编辑功能模块,效果图如下: 实现思路: 1.arcgis server发布的FeatureServer服务提供的图层在线编辑能力: 2.实现的在线编 ...