3052: [wc2013]糖果公园 Time Limit: 200 Sec  Memory Limit: 512 MBSubmit: 883  Solved: 419[Submit][Status][Discuss] Description Input Output Sample Input Sample Output 84 131 27 84 HINT Source Solution 树上带修莫队 本质还是树上莫队,详情可以转 BZOJ-3757苹果树 但是这里需要修改,就需要一些特殊的地方…
传送门 解题思路 树上带修莫队,搞了两天..终于开O2+卡常大法贴边过了...bzoj上跑了183s..其实就是把树上莫队和带修莫队结合到一起,首先求出括号序,就是进一次出一次那种的,然后如果求两个点且两个点的LCA是这两个点的一个,那么树上的路径其实就是in[x]到in[y].如果不是的话就是out[x]到in[y],且要加上lca,但这样太难统计,所以其实可以变成in[x]到in[y],然后直接特判.假如一段序列中既有一个点的in,又有一个点的out,那么其实就相当于没算,所以要记个vis数…
link 题目大意:给一个树,树上每个点都有一种颜色,每个颜色都有一个收益 每次修改一个点上的颜色 或询问一条链上所有颜色第i次遇到颜色j可以获得w[i]*v[j]的价值,求链上价值和 题解:树上带修莫队 按照带修莫队那套理论,我们要把树分成若干个块满足每个块内联通 把询问按照左端点所在块为第一关键字,右端点所在块为第二关键字,时间为第三关键字排序 假设块的大小为 \(B\) 则换块次数为 \(O((\frac{N}{B})^2)\) ,每次换块复杂度 \(O(n)\) 不换块每块内时间维度修改…
题面: 传送门 思路: 一道实现起来细节比较恶心的题目 但是其实就是一个裸的树上带修改莫队 好像树上莫队也出不了什么结合题目,不像序列莫队天天结合AC自动机.后缀数组...... 莫队学习请戳这里:莫队 Code: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #define ll long long using…
题面 中文题面,难得解释了 BZOJ传送门 Luogu传送门 分析 树上带修莫队板子题... 开始没给分块大小赋初值T了好一会... CODE #include <bits/stdc++.h> using namespace std; typedef long long LL; template<typename T>inline void read(T &num) { char ch; while((ch=getchar())<'0'||ch>'9'); fo…
Description Input Output Sample Input Sample Input Sample Output 84 131 27 84 HINT 思路 非常模板的树上带修莫队 真的很裸 直接暴力维护就可以了 注意一下询问的第二关键字是第二个节点所在块,第三关键字是时间,不然jmr说会出锅 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1e5 + 10; int…
题面 求树上某路径上最小的没出现过的权值,有单点修改 添加链接描述 分析 树上带修莫队板题,问题是怎么求最小的没出现过的权值. 因为只有nnn个点,所以没出现过的最小值一定在[0,n][0,n][0,n]内,所以大于nnn的无需维护.那么我们就值域分块,每n\sqrt nn​个数开一个数组,那么从小到大枚举块,如果当前块没有满那么就在这个块里查找,每次查找时间复杂度为O(n)O(\sqrt n)O(n​).因为n,mn,mn,m值域相同,所以总时间复杂度为O(n53(莫队)+nn(分块查询)+n…
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4129 题解 考虑没有修改的序列上的版本应该怎么做: 弱化的题目应该是这样的: 给定一个序列,每次询问区间 \([l, r]\) 中元素的最小没有出现的自然数. 这个弱化的版本可以用离线+线段树二分水掉.但是这个做法显然不太好搬到树上做. 上面的弱化版还有一个莫队做法:可以用莫队维护出来每一个区间的每一个数的出现为次数.把出现过的数通过分块表示出来,于是查询的时候枚举每一个块,寻找第一个不满的…
思路: 就是把带修莫队移到了树上 块的大小开到(n^2/3)/2 比较好- 这是一个卡OJ好题 //By SiriusRen #include <cmath> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int N=100050; int n,m,q,xx,yy,Block,block[N],cnt=1,fa[N][20],tot,t…
2453: 维护队列 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 653  Solved: 283[Submit][Status][Discuss] Description 你小时候玩过弹珠吗? 小朋友A有一些弹珠,A喜欢把它们排成队列,从左到右编号为1到N.为了整个队列鲜艳美观,小朋友想知道某一段连续弹珠中,不同颜色的弹珠有多少.当然,A有时候会依据个人喜好,替换队列中某个弹珠的颜色.但是A还没有学过编程,且觉得头脑风暴太浪费脑力了,所以向你…
思路: 可以先做做BZOJ3585 是序列上的mex 考虑莫队的转移 如果当前数字出现过 线段树上把它置成1 对于询问 二分ans 线段树上查 0到ans的和 是不是ans+1 本题就是把它搞到了序列上 带了个修改- 麻烦一点 本质上是一样的 //By SiriusRen #include <cmath> #include <cstdio> #include <cstring> #include <algorithm> using namespace std…
树上莫队的基本思路是把树按dfs序分块,然后先按x所在块从小到大排序,再按y所在块从小到大排序,处理询问即可. 这道题带修改,再加一个时间维即可. 设块大小为T,那么时间复杂度为$O(nT+\frac{n^3}{T^2})$,当$T=n^\frac23$时,时间复杂度最优,为$n^\frac53$. 但是实际测试中,取$T=n^\frac23*0.5$跑得比较快,还有询问中如果x所在块大于y所在块,就交换x,y,也可以加快速度. 在BZOJ上卡了两波评测机,BZOJ差点崩了.. #include…
题意:给定一个n个点的树,每个结点上有一种颜色c[i] 定义一条简单路径的偷税指数为simga (sigma w[i](i=0..a[j]))*v[j](j=0..m),其中a[i]为第i种颜色在路径上出现的次数 现在共有q个非强制在线的操作,格式为(op,x,y) op=0时代表将x号点的颜色修改为y op=1时询问(x,y)这条简单路径的偷税指数 思路: #include<bits/stdc++.h> using namespace std; typedef long long ll; t…
原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ3052.html 题目传送门 - BZOJ3052 题目传送门 - UOJ#58 题意 给定一棵树,有 $n$ 个节点.有 $m$ 种颜色,第 $i$ 个节点的颜色为 $c_i$ . 给定参数 $v_{1},v_2,\cdots,v_m$ 和 $w_1,w_2,\cdots ,w_n$ ,具有以下意义: 第 $i$ 次遇到颜色为 $j$ 的节点,新得到的收益为 $v_{j}\times w_i$ .…
题目描述:给出一棵 \(n\) 个点的树,点有颜色 \(C_i\),长度为 \(m\) 的数组 \(V\) 和长度为 \(n\) 的数组 \(W\).有两种操作: 将 \(C_x\) 修改为 \(y\). 求 \(u\) 到 \(v\) 的链的 \(\sum\limits_{i=1}^m\sum\limits_{j=1}^{cnt_i}W_j\),其中 \(cnt_i\) 表示颜色 \(i\) 的出现次数. 数据范围:\(n,m\le 10^5,1\le C_i\le m\),时限6s(洛谷)或…
题目描述 Candyland 有一座糖果公园,公园里不仅有美丽的风景.好玩的游乐项目,还有许多免费糖果的发放点,这引来了许多贪吃的小朋友来糖果公园游玩. 糖果公园的结构十分奇特,它由 \(n\) 个游览点构成,每个游览点都有一个糖果发放处,我们可以依次将游览点编号为 \(1\) 至 \(n\).有 \(n-1\) 条双向道路连接着这些游览点,并且整个糖果公园都是连通的,即从任何一个游览点出发都可以通过这些道路到达公园里的所有其它游览点. 糖果公园所发放的糖果种类非常丰富,总共有 \(m\) 种,…
Written with StackEdit. Description \(Candyland\) 有一座糖果公园,公园里不仅有美丽的风景.好玩的游乐项目,还有许多免费糖果的发放点,这引来了许多贪吃的小朋友来糖果公园游玩. 糖果公园的结构十分奇特,它由 \(n\) 个游览点构成,每个游览点都有一个糖果发放处,我们可以依次将游览点编号为 \(1\) 至 \(n\).有 \(n – 1\) 条双向道路连接着这些游览点,并且整个糖果公园都是连通的,即从任何一个游览点出发都可以通过这些道路到达公园里的所…
[题目]#58. [WC2013]糖果公园 [题意]给定n个点的树,m种糖果,每个点有糖果ci.给定n个数wi和m个数vi,第i颗糖果第j次品尝的价值是v(i)*w(j).q次询问一条链上每个点价值的和或修改一个点的糖果ci.n,m,q<=10^5. [算法]树分块+带修改莫队算法 [题解]参考:WC 2013 糖果公园 park 题解 by vfleaking 首先树分块,参考王室联邦的方法.确定块大小为B,一遍DFS可以分成若干大小为[B,3B]的块,性质是块内两点距离至多为B. 定义(x,…
4129: Haruna’s Breakfast Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 835  Solved: 409[Submit][Status][Discuss] Description Haruna每天都会给提督做早餐! 这天她发现早饭的食材被调皮的 Shimakaze放到了一棵 树上,每个结点都有一样食材,Shimakaze要考验一下她. 每个食材都有一个美味度,Shimakaze会进行两种操作: 1.修改某个结点的食材的美味…
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2120 题意:两种操作:Q 询问区间  l - r  内颜色的种类 ,R 单点修改 思路: 带修莫队与普通莫队不同之处就是,带修莫队可以支持修改操作,我们可以再维护一维来表示操作的时间,那么离线处理询问时,我们就需要维护 l,r,t,三根指针,同时因为是三根指针 块的大小分成 n的2/3次方,其他地方和普通莫队维护是一样的,只是多维护了一维操作时间,可能看上去会绕一点. 实现代码: #…
2120: 数颜色 Time Limit: 6 Sec  Memory Limit: 259 MBSubmit: 6367  Solved: 2537[Submit][Status][Discuss] Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2. R P Col 把第P支画笔替换为颜色Col.为了满足墨墨的要求,你知道你需要干…
思路: 暴力能过的 嘿嘿嘿 我是来练带修莫队的嗯 复杂度 O(n^5/3) //By SiriusRen #include <cmath> #include <cstdio> #include <algorithm> using namespace std; const int N=1050000; int n,m,a[N],cnt1,cnt2,Block,block[N],xx,yy,ans,sum[N],last[N],Ans[N]; char op[105]; s…
[题意]给定n个节点的树,每个节点有一个数字ai,m次操作:修改一个节点的数字,或询问一条树链的数字集合的mex值.n,m<=5*10^4,0<=ai<=10^9. [算法]树分块+带修改莫队算法 [题解]和[BZOJ]3052: [wc2013]糖果公园 树分块+待修改莫队算法差不多. 区别在于如何处理树链信息.考虑对值域分块,由于>n的数字没用,所以对[0,n]分块,维护每一块所含数字个数. 这样就可以O(1)单点修改,O(√n)查询.(扫描到第一块所含数字不满的块,再块内扫描…
题目链接 [BZOJ传送门] [洛谷传送门] 题目大意 单点修改,区间查询有多少种数字. 解法1--树套树 可以直接暴力树套树,我比较懒,不想写. 稍微口胡一下,可以直接来一个树状数组套主席树,也就是待修的主席树. 然后查询的时候,两个根节点减一下就可以了. 解法2--带修莫队 这是带修莫队的模板题. 最简单的莫队是是一个二元组\((l,r)\),这里引入了一个新的参数,变成了三元组\((l,r,t)\),\(t\)所表示的是在这个查询最前面的哪一个修改的编号. 然后我们这个\(t\)当做第三关…
原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ2120.html 题目传送门 - BZOJ2120 题意 给定一个长度为 $n$ 的序列 $a$ ,有 $m$ 次操作,每次操作可能是如下两种类型之一: 1. 询问区间不同值的个数. 2. 修改一个 $a_i$ . 对于每一次询问,输出结果. $n,m\leq 10000,\ \ \ \ 1\leq a_i\leq10^6$ 题解 带修莫队裸题. 打错一个变量找了20分钟. 代码 #include <…
Dynamic len [题目链接]Dynamic len [题目类型]带修莫队 &题解: 莫队可以单点更改,只要再多加一维,代表查询次数,排序的时候3个关键字. 之后循环离线的时候,先暴力时间指针(oi大佬说的),之后l,和r就随便了.还有要会用vis数组. [时间复杂度]\(O(n^{\frac{5}{3}})\) &代码: #include <cstdio> #include <bitset> #include <iostream> #includ…
BZOJ3585,BZOJ2120,BZOJ3757三合一. 对于树上路径问题,树链剖分难以处理的时候,就用树上带修改莫队. 这里的MEX问题,使用BZOJ3585的分块方法,平衡了时间复杂度. 剩下的就是将分块.树上莫队.带修改莫队合在一起了.大概要实现一下几个函数: 插入某值.删除某值.查询MEX.加入一个修改操作.更改一个点产生的影响(可能加入可能删除). 另外要注意两个经典易错处:修改操作要记录lst以方便撤销,lst初始就是读入的数值.左端点所在块编号比右端点大是交换左右端点. #in…
这题用了三种算法写: 分块+二分:O(n*sqrt(n*log(n)) 函数式权值分块:O(n*sqrt(n)) 带修莫队+权值分块:O(n5/3) 结果……复杂度越高的实际上跑得越快……最后这个竟然进第一页了…… #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; int f,C; inline void R(int &…
点此看题面 大致题意:告诉你\(n\)只蜡笔的颜色,有两种操作:第一种操作将第\(x\)只蜡笔颜色改成\(y\),第二种操作询问区间\([l,r]\)内有多少种颜色的蜡笔. 考虑普通莫队 这题目第一眼看上去感觉和[洛谷2709]小B的询问很像,然后就自然而然地会想到用莫队去做. 但是,在仔细想想,就会发现这道题中有修改,普通的莫队是做不了这样的题目的. 于是,我们就要用一种新的算法:带修莫队. 带修莫队 如果你会带修莫队,那么这题应该就是一道简单的板子题了. 对于每一个询问,记录下在这次询问前进…
比较裸的带修莫队,对每个修改操作记一下它修改的位置修改前的颜色 然后正常莫队,每次对修改操作时间倒流一下即可 #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; const int N=200005; int n,m,bl[N],la[N],co[1000005],ta,tb,v…