题目描述

有一个 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 的回答。

输入输出样例

输入样例#1:

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:

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]简单题的更多相关文章

  1. 洛谷 P5057 [CQOI2006]简单题 题解

    P5057 [CQOI2006]简单题 题目描述 有一个 n 个元素的数组,每个元素初始均为 0.有 m 条指令,要么让其中一段连续序列数字反转--0 变 1,1 变 0(操作 1),要么询问某个元素 ...

  2. P5057 [CQOI2006]简单题(线段树)

    果然简单题,5分钟紫题++ 代码 #include <cstdio> #include <algorithm> #include <cstring> using n ...

  3. 洛谷P5057 [CQOI2006]简单题(线段树)

    题意 题目链接 Sol 紫色的线段树板子题??... #include<iostream> #include<cstdio> #include<cmath> usi ...

  4. 洛谷 P5057 [CQOI2006]简单题(树状数组)

    嗯... 题目链接:https://www.luogu.org/problem/P5057 首先发现这道题中只有0和1,所以肯定与二进制有关.然后发现这道题需要支持区间更改和单点查询操作,所以首先想到 ...

  5. 洛谷 P5057 [CQOI2006]简单题 (树状数组,位运算)

    题意:有一个长度为\(n\)的数组,进行\(m\)次操作,每次读入一个值\(t\),如果\(t=1\),则将区间\([l,r]\)的数字反转,若\(t=2\),则查询下标为\(i\)的值. 题解:树状 ...

  6. [洛谷P5057][CQOI2006]简单题

    题目大意:有一个长度为$n$的$01$串,两个操作: $1\;l\;r:$把区间$[l,r]$翻转($0->1,1->0$) $2\;p:$求第$p$位是什么 题解:维护前缀异或和,树状数 ...

  7. P5057 [CQOI2006]简单题 前缀异或差分/树状数组

    好思路,好思路... 思路:前缀异或差分 提交:1次 题解:区间修改,单点查询,树状数组,如思路$qwq$ #include<cstdio> #include<iostream> ...

  8. P5057 【[CQOI2006]简单题】

    洛谷P5057[CQOI2006]简单题 差分 树状数组基本操作不说了,主要想记录一下异或下的差分 a数组为每一位的真实值(假设\(a[0]=0\)),t为差分后的数组 则\(t[i]=a[i]\)^ ...

  9. 「CQOI2006」简单题 线段树

    「CQOI2006」简单题 线段树 水.区间修改,单点查询.用线段树维护区间\([L,R]\)内的所有\(1\)的个数,懒标记表示为当前区间是否需要反转(相对于区间当前状态),下方标记时懒标记取反即可 ...

随机推荐

  1. 【Python3爬虫】教你怎么利用免费代理搭建代理池

    一.写在前面 有时候你的爬虫刚开始的时候可以正常运行,能够正常的爬取数据,但是过了一会,却出现了一个“403 Forbidden",或者是”您的IP访问频率太高“这样的提示,这就意味着你的I ...

  2. Python input保证输入为int类型

    t = float(input("t(℃)="))

  3. spring beans源码解读之--总结篇

    spring beans下面有如下源文件包: org.springframework.beans, 包含了操作java bean的接口和类.org.springframework.beans.anno ...

  4. 斑马打印机的安装调试,生成PDF

    1.  我使用的斑马打印机GK888T.有问题打客服,耐心等待.售后电话4006456456得到了解决. 2.  我遇到的问题是打印一张之后指示灯变为红灯,时好时坏.解决方案,长按指示键,待指示灯连续 ...

  5. 关于时间的那些事--PHP、JavaScript、MySQL操作时间

    PHP篇 PHP中时间操作单位是秒 一.将时间戳转为普通日期格式 //当前时间戳 time(); //当前时间格式 date("Y-m-d H:i:s",time()); //昨天 ...

  6. Spring中关于AOP的实践之AspectJ方式实现通知

    (本文中如有不当之处,恳请批评指正) AspectJ方式的简化了通知的出现复杂度.但是对配置文件的操作复杂度有了一定的提升 一. 配置通知 package com.xkx.adviceDemo; im ...

  7. 微信h5 video的问题

    https://blog.csdn.net/hf123lsk/article/details/78920211

  8. element表格添加查看操作

    表格代码:黄色部分关键代码 首先看效果: <el-table :data="tableData" border height="480" style=&q ...

  9. .net开源工作流ccflow从表数据数据源导入设置

    第1节. 关键字 驰骋工作流引擎 流程快速开发平台 workflow ccflow jflow  .net开源工作流 第2节. 从表数据导入设置 1.1.1: 概要说明 在从表的使用中我一般都会用到从 ...

  10. arcgis api for js入门开发系列十九图层在线编辑

    本篇主要讲述的是利用arcgis api实现图层在线编辑功能模块,效果图如下: 实现思路: 1.arcgis server发布的FeatureServer服务提供的图层在线编辑能力: 2.实现的在线编 ...