[CF896E]Welcome home, Chtholly 题意:一个长度为n的序列ai,让你支持两种操作: 1.l r x:将[l,r]中ai>x的ai都减去x.2.l r x:询问[l,r]中有多少ai=x. n,m<=100000,ai,x<=100000. 题解:先分块,对于每一块,我们用双向链表维护块内所有不同的ai的值(排好序的):对于每个ai的值,我们再用一个链表维护这个值在块内所有的出现位置. 对于操作1,将所有ai>x的数都减去x 等价于 先将所有ai<=…
51nod 1471 小S的兴趣 题面 小S喜欢有趣的事.但是,每个人的兴趣都是独特的.小S热衷于自问自答.有一天,小S想出了一个问题. 有一个包含n个正整数的数组a和针对这个数组的几个问题.这些问题有两种类型: 在数组下标l到r的部分上,将一个单元格循环移动到右端.即以下面方式重新分配数组上的元素. a[l], a[l+1], ..., a[r-1], a[r] → a[r], a[l], a[l+1], ..., a[r-1]. 在数组下标l到r的部分上,计算有多少元素的值与k相等. 小S很…
卿学姐种花 题目连接: http://acm.uestc.edu.cn/#/problem/show/1292 Description 众所周知,在喵哈哈村,有一个温柔善良的卿学姐. 卿学姐喜欢和她一样美丽的花.所以卿学姐家的后院有很多的花坛. 卿学姐有\(n\)个花坛,一开始第\(i\)个花坛里有\(A[i]\)朵花.每过一段时间,卿学姐都会在花坛里种上新的花. 作为一个聪明的学姐,卿学姐的种花方式也是与众不同 , 每一次,卿学姐会在第\(x\)个花坛种上\(y\)朵花,然后在第\(x+1\)…
求大爷教线段树怎么写啊QAQ 只会写分块...一开始脑抽写成了O(NKlogN)还被CZL大爷嘲讽了一发T T f[i][j]表示在第i块中,模k为j的数有几个,然后每次修改的时候只需要打个标记,查询的时候直接加上标记查就行了 #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<cmath> using namespace std; ;…
题意: 给定一个长度为 N 的序列两种操作1 l r 将[l,r]的数向右循环移位 2 l r 询问[l,r]内有多少个数等于 k其中 N,Q≤105,ai≤N 强制在线 思路: 1. 每块用一个链表维护一下 位移的话由于是链表,操作速度很快然后每个数都不超过 N,所以用一个数组记录一下每块每个数的个数 总的复杂度就是 O(Qsqrt(N)) 2. 如果不考虑那个奇怪的询问的话,可以简单地用splay树维护序列.但是splay上显然不能维护每种颜色的个数,这样在每个节点上时间和空间都是O(n)的…
#include <iostream> #include <cstdio> #include <algorithm> #include <cmath> using namespace std; typedef long long ll; ; int belong[maxn],l[maxn],r[maxn],block,num,n,q; ll a[maxn],Max[maxn]; void build(){ block=sqrt(n); num=n/block…
题意 题目链接 分析 首先明确 \(xor\) 运算和 \(\rm gcd\) 没有联系! 注意到一个数字取 \(\rm gcd\) 且保证每次取 \(\rm gcd\) 值都会变小的话,最多取 \(\log\) 次. 比较显然,如果每次都变小的话至少都除以了因子 \(2\) ,变为原来的二分之一. 所以考虑一个暴力分块,记录每一块的 \(\rm gcd\) G[i].异或和X[i].前缀异或和. 如果 \({\rm gcd}(lastgcd,G[i])=lastgcd\) ,那么直接在该块记录…
3343: 教主的魔法 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1172  Solved: 526[Submit][Status][Discuss] Description 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.…….N. 每个人的身高一开始都是不超过1000的正整数.教主的魔法每次可以把闭区间[L, R](1≤L≤R≤N)…
http://www.lydsy.com/JudgeOnline/problem.php?id=4765 很nice的一道题啊(可能是因为卡了n久终于做出来了 题意就是给你一棵带点权的有根树,sum(i)表示以i为根的这颗子树中所有节点的权值和.有两种操作,一种是修改某个点的权值,另一种是给出l,r,求sum(l)+sum(l+1)...+sum(r). 首先考虑一个简单的问题,如果单求其中一个sum(i),我们可以怎样做. 很明显我们画个图,我们可以看到每个点打上dfs序之后,每个sum就变成…
简化版题意 给出一个长为n的数列,以及n个操作,操作涉及区间开方(每个数都向下取整),区间求和,保证所有数都为有符号32位正整数. N<=50000 Solution 首先我们先思考: 一个有符号32位正整数最多只能被开方几次就会得到相同的值? \(Example\):\(2147483647=2^{31}-1\) 最多5次(由于是向下取整) 所以,我们将数列中的每一个数,都开方5次,复杂度为\(O(5n)\) 然后我们再来考虑如何分块 对于每一个块,我们可以打一个标记\(tag[i]\) 表示…