05 2021 档案
摘要:题链 线段树维护区间最大字段和; 讲的非常好 #include <bits/stdc++.h> using namespace std; #define ls rt<<1 #define rs rt<<1|1 #define LL long long #define ll long long #de
阅读全文
摘要:题链 线段树维护节点从左边最大,从右边最大,最大子段和,总和,区间最大值; 如果区间最大值小于 0,输出区间最大值; 否则输出最大子段和; #include <bits/stdc++.h> using namespace std; #define ls rt<<1 #define rs rt<<1|
阅读全文
摘要:题链 题意:给定n个点,从中选择一个点poi,使得其他点到x的切比雪夫距离之和最小; 学习有关二维坐标系上有关曼哈顿距离与切比雪夫距离相互转化后; 可将题给求切比雪夫距离转化成求曼哈顿距离,相当于改变题意; 也就是说题意可变成 “ 给定n个点,从中选择一个点x,使得其他点到poi的曼哈顿距离之和最小
阅读全文
摘要:--概述 --关于转化 曼哈顿距离、切比雪夫距离相互转化 --例题 洛谷P3964 [TJOI2013]松鼠聚会
阅读全文
摘要:题链 做法1 写T了; 这是做法2; #include <bits/stdc++.h> using namespace std; #define ls rt<<1 #define rs rt<<1|1 #define LL long long #define PI acos(-1.0) #defin
阅读全文
摘要:#-- 原题解 题链 #-- 对于化简后的式子的理解 p[i] 是下标 i 之前有多少个与当前询问字母相同的字母; 将 ai-bp[i] 记为式子① ,将 ci-dp[i] 记为式子②; 为这两个式子构建两颗权值树状数组一二; 对于每一个新加入的 p[i],用式子②计算权值val2插入到第二颗树状数
阅读全文
摘要:# 题意 题链 题意:定义一个数字 num 在一个数组中的贡献为 最后一次出现的下标 减去 第一次出现的下标; 定义一个数组的价值 cost 为该数组中出现过的数字 num 的价值总和; 如数组 [2,2,3,2,3],cost = (4-1)+(5-3) = 5; 给定 n ,m,以及长度为 n
阅读全文
摘要:题链 原来这才是可持久化的基础之基础 #include <bits/stdc++.h> //#include <ext/rope> //using namespace __gnu_cxx; using namespace std; #define LL long long #define ll lo
阅读全文
摘要:题链 dp[x] 表示以 x 为进化终点能取得的最大进化次数; 可以发现 dp[x] 等于 树上x的前缀最大值 +1; 但是不可能递归寻找x的父亲直到根节点,因为会超时; 所以采用重链剖分+线段树维护前缀最大值,复杂度O(nlogn*logn); #include <bits/stdc++.h> u
阅读全文
摘要:题链 #include <bits/stdc++.h> using namespace std; #define LL long long #define ll long long #define ULL unsigned long long #define Pair pair<LL,LL> #de
阅读全文
摘要:题链 学习自大型同性交友网站,这个B 站up主讲的非常好! 终于学会了第一个维护树上问题的方法,我好兴奋啊! #include <bits/stdc++.h> using namespace std; #define LL long long #define ll long long #define
阅读全文
摘要:题链 维护两个数组v1[],v2[],v1[]用于标记,v2[]用于记录v1的后缀和,对于一个询问,如果在字典树上向下查找直到查找不到时,此时答案就是访问到的v1[]的和,如果查找完了,也就是说字典树上还有比询问更长的串,则答案也是访问到的v1[]的和,但是得加上此时的后缀和v2[],因为当前v2[
阅读全文
摘要:题链 字典树模板题; 总结:字典树数组长度应大于等于所有字符串总和长度,数组最后一维取决于字符集的大小; #include <bits/stdc++.h> using namespace std; #define LL long long #define ll long long #define U
阅读全文
摘要:题链 p[i][j] 表示 mod 为 i,池子为 j 的总和,可以预处理 mod 在 [1,1000] 范围内的答案,O(1)回答每个询问; 如果询问的范围超过了 1000,则暴力跑一边即可; 复杂度顶得住... #include <bits/stdc++.h> using namespace s
阅读全文
摘要:题链 题意在线求区间众数,若有多个输出权值最小的那个; 离线可采用莫队,在线由于区间众数不满足区间可加性(或许我不知道,不会维护),所以采用分块方式来写; 对于数据范围首先离散化,对长度为 n 的数组分为 sqrt(n) 块,预处理出第 i 块到第 j 块的区间众数答案; 预处理出数组每一个不同值的
阅读全文
摘要:题链 OI-wiki 字符串以 1 为开头写的 #include <bits/stdc++.h> using namespace std; #define LL long long #define ll long long #define ULL unsigned long long #define
阅读全文
摘要:题链 dp[u][j]表示 包含u这个节点 不包含u节点父亲 大小为j的连通块方案数; 设v是u的一个子节点,并且递归求解出dp[v][j],递归终点就是dp[v][1] = 1,然后类似背包方法合并dp[u][],dp[v][]; 记cnt[i]表示大小为i的连通块数量; cnt[i]就是dp[
阅读全文
摘要:题链 dp[u][j]表示u这个节点取j个物品的最大值(包含u点); 设v是u的一个子节点,并且递归求解出dp[v][j],递归终点就是dp[v][1] = val[v](val[v] 表示点v的权值),然后合并u,v; 答案就是dp[0][m+1],从0号点选取m+1个物品的最大值(0号物品val
阅读全文
摘要:LL qpow(LL x,LL y){ LL ans = 1; for(;y;y>>=1){ if(y&1) ans = (ans*x)%mod; x = (x*x)%mod; } return ans%mod; } LL inv(LL x,LL y){ // x/y; return ( (x%mo
阅读全文
摘要:题链 多次询问一个区间内最小没有出现过的自然数 回滚莫队:发现添加一个数难以维护,故只用删除操作来维护答案。用cnt[]来计数,一开始把[1,n]全部塞进去,记录全局答案ANS,只有新的询问所属的块与上次询问不同时更新ANS(因为该询问前面的块已经没有用了); 什么时候更新答案ans呢?一开始ans
阅读全文
摘要:题链 1.普通莫队:维护两个数组v[i]与cnt[i],v[i]表示i出现次数,cnt[i]表示出现i次的数有多少个; 对于新加入的数很好更新,ans = max(ans,v[x]),对于删除的数x,若这个的数被删之前v[x] = 1了,删完后就没了,并且出现ans次的数的个数cnt[ans] =
阅读全文
摘要:题链 题意询问区间最大价值,最大价值指区间中 a[i]出现次数*a[i] 的最大值; 莫队解决:发现新增一个数字很好维护最大值(计数就行),但是删除一个数字困难,所以用到回滚莫队 这篇博客看的通俗易懂,代码也是~ 回滚莫队 //#include <bits/stdc++.h> #include <i
阅读全文
摘要:题链 1、 Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔。 2、 R P Col 把第P支画笔替换为颜色Col。 带修改莫队; 学玩普通莫队再看带修改莫队,OI-wiki上讲的通俗易懂; 对比主要是这几点: 1.分块unit = pow(n,2.0/3.0); 2.对询问排序
阅读全文
摘要:题链 对于每一个a[i]可以记录它上一次出现的位置; 1.可以用树状数组解(离线):对询问排序(询问的r从小到大),右指针移动则add(R,1),然后对a[R]上一次出现的位置add(pos,-1),对于一个询问则是query(r)-query(l-1); 2.可以主席树记录原数组下标方式解(在线)
阅读全文
摘要:题链 给你一个长度为n的序列,有m次查询操作,每次查询[L,R]区间的友好对的个数。 友好对的定义:满足i<j,且|ai-aj|<=K。 考虑每添加一个元素,计算该元素范围内[x-k,x+k]有多少个数(对树状数组来一发询问即可 query(r) - query(l-1) ),加上该贡献; 离散所给
阅读全文