[洛谷P5057][CQOI2006]简单题】的更多相关文章

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,则接下来只…
题意 题目链接 Sol 紫色的线段树板子题??... #include<iostream> #include<cstdio> #include<cmath> using namespace std; const int MAXN = 1e6 + 10; inline int read() { char c = getchar(); int x = 0, f = 1; while (c < '0' || c > '9') {if (c == '-')f = -…
嗯... 题目链接:https://www.luogu.org/problem/P5057 首先发现这道题中只有0和1,所以肯定与二进制有关.然后发现这道题需要支持区间更改和单点查询操作,所以首先想到的是异或意义下的差分数组,于是自己便写了一个差分数组,确实好写,但很慢(可能我写的不优),下面是五十分的异或意义下的差分的代码: #include<cstdio> #include<iostream> using namespace std; ], b[]; int main(){ i…
题意:有一个长度为\(n\)的数组,进行\(m\)次操作,每次读入一个值\(t\),如果\(t=1\),则将区间\([l,r]\)的数字反转,若\(t=2\),则查询下标为\(i\)的值. 题解:树状数组的板子题,但是考察到了位运算的知识,我们对区间进行反转的时候,只需要对树状数组\(c[l]\) ^ 1,\(c[r+1]\) ^ \(1\)即可,然后进行单点查询时只须对前缀异或就好了. 代码: int n,m; int a[N]; int op,l,r,x; int lowbit(int x)…
题目大意:有一个长度为$n$的$01$串,两个操作: $1\;l\;r:$把区间$[l,r]$翻转($0->1,1->0$) $2\;p:$求第$p$位是什么 题解:维护前缀异或和,树状数组即可 卡点:无 C++ Code: #include <cstdio> #include <cctype> namespace std { struct istream { #define M (1 << 24 | 3) char buf[M], *ch = buf -…
果然简单题,5分钟紫题++ 代码 #include <cstdio> #include <algorithm> #include <cstring> using namespace std; int tag[100100<<2],n,m; void pushdown(int o){ if(tag[o]){ tag[o<<1]^=1; tag[o<<1|1]^=1; tag[o]=0; } } void update(int L,int…
传送门 题意: 给出一个\(n*n\)的棋盘,现在有两种操作:一种是某个格子里的数字加上\(A\),另一种是询问矩阵和. 空间限制:\(20MB\),强制在线. 思路: 直接\(kd-tree\)来搞,复杂度是\(O(n\sqrt{n})\)的. 但这个题丧心病狂,卡空间不说,还卡时间. 我就是因为一开始结构体里面的构造函数多写了几条语句,卡了我整整几个小时,难受. 感觉\(kd-tree\)就这样了,本质是一种玄学暴力,只有矩阵查询复杂度稳定一点(直接上cdq分治啊).刷不动了,这种码量大的数…
题目描述 有一个 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,表示询问的…
好思路,好思路... 思路:前缀异或差分 提交:1次 题解:区间修改,单点查询,树状数组,如思路$qwq$ #include<cstdio> #include<iostream> using namespace std; #define R register int #define ull unsigned long long #define ll long long #define pause (for(R i=1;i<=10000000000;++i)) #define…
洛谷P5057[CQOI2006]简单题 差分 树状数组基本操作不说了,主要想记录一下异或下的差分 a数组为每一位的真实值(假设\(a[0]=0\)),t为差分后的数组 则\(t[i]=a[i]\)^\(a[i-1]\) 所以我们如果想要查询\(a[i]\) 则\(a[i]=a[0]\)$a[1]$\(a[1]\)$a[2]$\(a[2]\)$\dots$\(a[i]\)$a[i]$=$t[1]$\(t[2]\)$\dots$\(t[i]\) 所以在树状数组中记录t数组,修改时指修改(异或上1)…