codeforces 940F 带修改的莫队】的更多相关文章

F. Machine Learning time limit per test 4 seconds memory limit per test 512 megabytes input standard input output standard output You come home and fell some unpleasant smell. Where is it coming from? You are given an array a. You have to answer the…
You come home and fell some unpleasant smell. Where is it coming from? You are given an array a. You have to answer the following queries: You are given two integers l and r. Let ci be the number of occurrences of i inal: r, where al: r is the subarr…
https://www.lydsy.com/JudgeOnline/problem.php?id=2120 标题里是两种不同的解法. 带修改的莫队和普通莫队比多了个修改操作,影响不大,但是注意一下细节不要出现zz错误. 这道题修改的数量比较少可以写莫队,但是如果修改数量多或者是特别极限的数据大概是不行的吧. #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #i…
[题意]给定n个数字,m次操作,每次询问区间不同数字的个数,或修改某个位置的数字.n,m<=10^4,ai<=10^6. [算法]带修改的莫队算法 [题解]对于询问(x,y,t),其中t是前面的修改次数,所有修改记录改前和改后. 首先按belong[x],然后按belong[y],最后按t排序.(块大小n^(2/3)) 移动询问,先移动t,然后移动x和y,运用对称差操作实现.如果移动t前修改格访问过,先删除影响,修改,再加回. 区间莫队需要注意的还有操作顺序问题,区间先拓展再收缩,以及修改的开…
题目描述 给出一棵树,点有点权.支持两种操作:修改一个点的点权,查询链上mex. 输入 第一行包括两个整数n,m,代表树上的结点数(标号为1~n)和操作数.第二行包括n个整数a1...an,代表每个结点的食材初始的美味度.接下来n-1行,每行包括两个整数u,v,代表树上的一条边.接下来m行,每行包括三个整数0 u x 代表将结点u的食材的美味度修改为 x.1 u v 代表询问以u,v 为端点的链的mex值. 输出 对于每次询问,输出该链的mex值. 样例输入 10 10 1 0 1 0 2 4…
题目描述 给出一棵n个点的树,每个点有一个点权,点权范围为1~m.支持两种操作:(1)修改一个点的点权 (2)对于一条路径,求$\sum\limits_{i=1}^m\sum\limits_{j=1}^{s_i}V_iW_j$,其中$s_i$表示这条链上权值为i的点数. 输入 输出 样例输入 4 3 51 9 27 6 5 12 33 13 41 2 3 21 1 21 4 20 2 11 1 21 4 2 样例输出 84 131 27 84 题解 带修改树上莫队 带修改树上莫队——普通莫队的…
\(\color{#0066ff}{ 题目描述 }\) 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2. R P Col 把第P支画笔替换为颜色Col. 为了满足墨墨的要求,你知道你需要干什么了吗? \(\color{#0066ff}{输入格式}\) 第1行两个整数N,M,分别代表初始画笔的数量以及墨墨会做的事情的个数. 第2行N个整数,分别代表初始画笔…
UOJ 58 糖果公园 Problem : 给一棵n个点的树,每个点上有一种颜色,对于一条路径上的点,若 i 颜色第 j 次出现对该路径权值的贡献为 w[i] * c[j], 每次询问一条路径的权值,或者修改某个点的颜色. Solution : 树上的带修改的莫队. 使用dfs序来对左右端点进行分块. 第一关键字分块排序左端点,第二关键字分块排序右端点,第三关键字排序询问顺序. 用S(v, u)代表 v到u的路径上的结点的集合. 用root来代表根结点,用lca(v, u)来代表v.u的最近公共…
题意显然:给出初始序列,单点修改,区间查询元素的种类. 由于时限过宽,暴力可过. 比较优秀的解法应该是莫队. 带修改的莫队题解可以看https://www.luogu.org/blog/user12668/solution-p1903 证明和解释比较详细. 但是……为什么我的莫队也要跑5~6秒, /* ¡ó¡ó¡ó¡ó¡ó¡ó¡ó¡ó¡ó¡ó¡ó¡ó¡ó¡ó¡ó¡ó¡ó¡ó¡ó¡ó¡ó¡ó¡ó¡ó¡ó¡ó¡ó¡ó¡ó¡ó¡ó¡ó¡ó¡ó¡ó¡ó¡ó¡ó¡ó¡ó¡ó¡ó¡ó¡ó¡ó ¡ó¡ó¡ó¡…
题解原文地址:https://www.cnblogs.com/lujiaju6555/p/8468709.html 给数组a,有两种操作,1 l r查询[l,r]中每个数出现次数的mex,注意是出现次数,mex是最小未出现的自然数,2 x y将a[x]修改为y. 题解:带修改莫队可以解决此题.带修改莫队不会的同学可以先去做下BZOJ2120,然后mex+莫队可以参考BZOJ3585.带修改莫队就是加入了第三关键字time,然后按(左端点所在块,右端点所在块,时间)排序,其中时间指的是在第几次修改…
2120: 数颜色 Time Limit: 6 Sec  Memory Limit: 259 MB Submit: 3478  Solved: 1342 [Submit][Status][Discuss] Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2. R P Col 把第P支画笔替换为颜色Col.为了满足墨墨的要求,你知道你需…
Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2. R P Col 把第P支画笔替换为颜色Col.为了满足墨墨的要求,你知道你需要干什么了吗? Input 第1行两个整数N,M,分别代表初始画笔的数量以及墨墨会做的事情的个数.第2行N个整数,分别代表初始画笔排中第i支画笔的颜色.第3行到第2+M行,每行分别代表墨墨会做的一件事情,格…
https://www.luogu.org/problemnew/show/P1903 之前切过这道题,复习莫队再切一遍,不过我之前写的是主席树和树状数组,也不知道我当时怎么想的…… 这个题卡常我没写快读只有开O2才能过,找这道题题解的时候发现了typedef这个东西,据说比define好用就写上了,虽然到最后也没用上…… 总复杂度O( n^ ( 5/ 3) ) 这个块的大小是n^ ( 2/ 3) ,我也不知道为什么,好像根据数据范围可以改的. #include<bits/stdc++.h>…
2120: 数颜色 Time Limit: 6 Sec  Memory Limit: 259 MBSubmit: 3665  Solved: 1422[Submit][Status][Discuss] Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2. R P Col 把第P支画笔替换为颜色Col.为了满足墨墨的要求,你知道你需要干…
UVA12345 Dynamic len Problem : 给一个序列,每次询问一个区间里面的数字种类数量,或者修改某一个位置的值. Solution : 第一关键字分块排序左端点,第二关键字分块排序右端点,第三关键字排序询问顺序. 左端点移动总的时间复杂度为 q * block_size + block_num * block_size 右端点移动总的时间复杂度为 q * block_size + block_num * block_num * block_size 询问端点总的时间复杂度为…
墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2. R P Col 把第P支画笔替换为颜色Col.为了满足墨墨的要求,你知道你需要干什么了吗? Input 第1行两个整数N,M,分别代表初始画笔的数量以及墨墨会做的事情的个数.第2行N个整数,分别代表初始画笔排中第i支画笔的颜色.第3行到第2+M行,每行分别代表墨墨会做的一件事情,格式见题干部分. Outp…
Powerful array 题意:求区间[l, r] 内的数的出现次数的平方 * 该数字. 题解:莫队离线操作, 然后加减位置的时候直接修改答案就好了. 这个题目中发现了一个很神奇的事情,本来数组开1e6大小就直接过了4100+ms, 想测试一下inline,顺手把空间砍成了刚好够用,然后跑的更慢了 4700+ms,删了inline之后T了,到现在也不知道发生了啥. 如果有大牛路过希望帮我看下,  CF run id  38822420(4100+) 38822607(4700+)388226…
传送门:https://codeforces.com/contest/86/problem/D 题意: 给你n个数,m次询问,每次询问问你在区间l,r内每个数字出现的次数的平方于当前这个数的乘积的和 题解: 莫队算法 思路: 根据平方和公式我们知道 \[ (a+1)^2=a^2+2a+1 \] 于是在记录每一次询问的答案时 add操作就是加上这个数的贡献 del操作就是减去这个数的贡献 每个数多出一次或者减少一次的对答案贡献就是 \[ a_i*(cnt[a[i]]*2+1) \] 代码: /**…
转换成前缀和, 预处理一下然后莫队. #include<bits/stdc++.h> #define LL long long #define fi first #define se second #define mk make_pair #define PLL pair<LL, LL> #define PLI pair<LL, int> #define PII pair<int, int> #define SZ(x) ((int)x.size()) #de…
题目描述 On a plane are nn points ( x_{i}xi​ , y_{i}yi​ ) with integer coordinates between 00 and 10^{6}106 . The distance between the two points with numbers aa and bb is said to be the following value:  (the distance calculated by such formula is calle…
题目链接 Powerful array 给你n个数,m次询问,Ks为区间内s的数目,求区间[L,R]之间所有Ks*Ks*s的和. $1<=n,m<=200000,   1<=s<=10^{6}$ 考虑莫队算法 把区间排序,然后让l和r分别询问即可. 根据排序的方式,l指针和r指针移动次数和大概是$n\sqrt{n}$ 级别的. #include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for (…
Tree and Queries 题意:有一颗以1号节点为根的树,每一个节点有一个自己的颜色,求出节点v的子数上颜色出现次数>=k的颜色种类. 题解:使用莫队处理这个问题,将树转变成DFS序区间,然后就是开一个数据记录下出现次数为k次的颜色数目,查询的时候直接返回这个数组中的对应的值就行了. 注意的就是记得将节点的颜色传递给dfs序对应位置的颜色. 这个忘记了找了好久的bug. 代码: #include<bits/stdc++.h> using namespace std; #defin…
题目描述: Problem Description An array of positive integers a1, a2, ..., an is given. Let us consider its arbitrary subarray al, al + 1..., ar, where 1 ≤ l ≤ r ≤ n. For every positive integer s denote by Ks the number of occurrences of s into the subarra…
D. Powerful array time limit per test 5 seconds memory limit per test 256 megabytes input standard input output standard output An array of positive integers a1, a2, ..., an is given. Let us consider its arbitrary subarray al, al + 1..., ar, where 1 …
F. Machine Learning time limit per test 4 seconds memory limit per test 512 megabytes input standard input output standard output You come home and fell some unpleasant smell. Where is it coming from? You are given an array a. You have to answer the…
莫队是一种对于询问的离线算法 时间复杂度:O(\(n \sqrt n\)) 大致思想就是 首先将询问离线,然后对原序列分块,使得每一个\(l和r\)都在一个块里 然后按照左节点排序,若所在的块相等,就比较右节点 int cmp1(Node a,Node b) { if (pos[a.l]==pos[b.l]) return a.r<b.r; return a.l<b.l; } 排序之后,我们再来分析一下时间复杂度:接下来我们会看到神奇的事情!! 刚才分析此方法的时候,我们是从L和R的偏移量分析…
以下内容未验证,有错请指正... 设块大小为T,则块数为$\frac{n}{T}$ 将询问分为$(\frac{n}{T})^2$块(按照左端点所在块和右端点所在块分块),同块内按时间从小到大依次处理 1.左/右端点块内移动总代价:$q*T$ 2.时间的移动总代价:$(\frac{n}{T})^2*n$ 总复杂度:$q*T+\frac{n^3}{T^2}$ 好吧,事实上一般不会这么写... 一般只需要把询问按三个关键字(优先级:左端点所在块>右端点所在块>时间)排序,然后在任意两个询问间转移 一…
题目链接:http://codeforces.com/problemset/problem/86/D D. Powerful array time limit per test 5 seconds memory limit per test 256 megabytes input standard input output standard output An array of positive integers a1, a2, ..., an is given. Let us consider…
和BZOJ2038差不多..复习一下. #include<cstdio> #include<cmath> #include<algorithm> using namespace std; int block; struct Query{ int i,l,r; bool operator<(const Query &q)const{ if(l/block==q.l/block) return r<q.r; return l/block<q.l/b…
D. Powerful array time limit per test 5 seconds memory limit per test 256 megabytes input standard input output standard output An array of positive integers a1, a2, ..., an is given. Let us consider its arbitrary subarray al, al + 1..., ar, where 1 …