随笔 - 531
文章 - 0
评论 - 3
阅读 -
10215
随笔分类 - 数据结构
P2495 [SDOI2011] 消耗战
摘要:f[x]=SUM{ min(f[y], z) } ( y是不重要的点) 建立虚树,然后dp #include <bits/stdc++.h> using namespace std ; const int N=3e6,M=N,inf=1e9; #define int long long int mn
阅读全文
P4054 [JSOI2009] 计数问题
摘要:二维树状数组板子, C[color] [x][y] #include <bits/stdc++.h> using namespace std ; const int N =403 ,M =2e5+4; #define int long long int A[N][N],c[101][N][N] ;
阅读全文
P1972 [SDOI2009] HH的项链
摘要:多次询问子序列 [L,R] 包含了多少种不同的数? 我们使用离线+树状数组,和last[j]表示上一次出现j的位置,对于第p个的数j,我们add(last[j],-1),add(p,1),因为我们按照r排序,只用管最右边的一个,所以留下最右端的就可以,对于一个询问直接树状数组求区间和; #inclu
阅读全文
P3605 [USACO17JAN]Promotion Counting P
摘要:求 某节点子树内比该节点的点权大的点的个数 值域上维护树状数组, #include <bits/stdc++.h> using namespace std ; const int N=1e5+2,M=N*2; int bin[N],len; int sum[N] ,n,ans[N],a[N]; in
阅读全文
P1966 [NOIP2013 提高组] 火柴排队
摘要:涵涵有两盒火柴,每盒装有 nn 根火柴,每根火柴都有一个高度。 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为:∑(ai−bi)2 其中 ai表示第一列火柴中第 i个火柴的高度,bi表示第二列火柴中第 i个火柴的高度。 每列火柴中相邻两根火柴的位置都可以交换,
阅读全文
P1196 [NOI2002] 银河英雄传说
摘要:有一个30000*N(i) 的列队,2种操作 1. M i,j i行移动到j行的末尾 2.C i,j 询问i行和j行的距离(如果在同一列) #include <bits/stdc++.h> using namespace std ; const int N=3e4; int fa[N+2],L[N]
阅读全文
P1455 搭配购买
摘要:商店里有n朵云,云朵被编号为i1,2,…,n ,并且每朵云都有一个价值。但一些云朵要搭配来买, 买一朵云则与这朵云有搭配的云都要买。 Joe的钱有限,希望买的价值最大 #include <iostream> #include <queue> #include <algorithm> using na
阅读全文
P1525 [NOIP2010 提高组] 关押罪犯
摘要:我们用“怨气值”(一个正整数值)来表示某两名罪犯之间的仇恨程度, 如果两名怨气值为 cc 的罪犯被关押在同一监狱,他们俩之间会发生摩擦,并造成影响力为 cc 的冲突事件。 每年年末,警察局会将本年内监狱中的所有冲突事件按影响力从大到小排成一个列表,然后上报市长那里。 市长只会去看列表中的第一个事件的
阅读全文
P2590 [ZJOI2008]树的统计
摘要:一棵树上有 n个节点,编号分别为 1 到 n,每个节点都有一个权值 W。 我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点 u的权值改为 t。 II. QMAX u v: 询问从点 u到点 v 的路径上的节点的最大权值。 III. QSUM u v: 询问从点
阅读全文
P1967 [NOIP2013 提高组] 货车运输
摘要:静态查询树上路径的最小边权 边权转点权: 将根节点设置 val[ rt ]=inf , 每个边权转移到向下的点的点权 然后树剖查询要改一下 树剖后用线段树查询点权最小值 #include <bits/stdc++.h> using namespace std ; const int N=5e5+4,
阅读全文
重链剖分板子
摘要:1 x y z,表示将树从 xx 到 yy 结点最短路径上所有节点的值都加上 zz。 2 x y,表示求树从 xx 到 yy 结点最短路径上所有节点的值之和。 3 x z,表示将以 xx 为根节点的子树内所有节点值都加上 zz。 4 x 表示求以 xx 为根节点的子树内所有节点值之和 #includ
阅读全文
P3522 [POI2011]TEM-Temperature
摘要:n天的温度测量,测量存在误差,测量结果是第 i天温度在[ Li,Ri ] 求最长的连续的一段,满足该段内可能温度不降。 一个纯粹的单调队列 要满足 R[ i] >= max{ L[k] } j<=k<=i (维护一个L[i] 增的队列) #include<iostream> #include <al
阅读全文
P1168 中位数
摘要:动态查询区间中位数 对顶堆,上面一个大根堆,下面小根堆,因此数值从上到下递增 不断交换堆顶的元素,使得abs(sz1-sz2)<=1 #include <iostream> #include <algorithm> #include <queue> #include <cmath> using na
阅读全文
P3870 开关
摘要:对01序列 区间异或,求区间和 #include <iostream> #include<queue> #include <cstring> #define IOS std::ios::sync_with_stdio(0) using namespace std; #define rt1 rt<<1
阅读全文
#10131. 暗的连锁 (树上差分
摘要:关于树上差分详细解释 https://www.cnblogs.com/fusiwei/p/11804595.html 树上差分常用于树上路径信息的统计, 比如我们对路径(x,y) 进行修改(比如每条边权值+1),要查询某条边的权值, 维护时: v(x)++, v(y)++, v[lca(x,y)]
阅读全文
lca 板子
摘要:这题#10130. 「一本通 4.4 例 1」点的距离 求树上两点的距离 #include <bits/stdc++.h> using namespace std ; const int N=1e6+2,M=N; int nxt[M],hd[N],all,go[M],n; int dep[N],f[
阅读全文
P1311 [NOIP2011 提高组] 选择客栈
摘要:一个数组,每个元素属性:颜色和代价, 选择2个元素l ,r,颜色要相同, 且 [l,r] 区间的 min(代价) <=P ; 问有多少方案 dp思想 ,还有维护信息 f[i] =f[j] ,( i,j 颜色相同) 考虑 区间 [ j ,i ] 若满足 min() <=p , f[i] = cnt[i
阅读全文
#10117. 「一本通 4.1 练习 2」简单题
摘要:01序列 操作 1. [l,r] 翻转 2.求位置 x 的值 维护区间的反转次数即可 区间修改 采用差分,求前缀和得到单点的值 #include <bits/stdc++.h> using namespace std ; const int N=5e5+2; int c[N],a[N],n; int
阅读全文
#10115. 「一本通 4.1 例 3」校门外的树
摘要:在区间上种树 1. 区间 [l,r] 全部设为一种树木(每次都种新的品种) 2. 问 [l,r] 内有多少种树木 且操作不会出现覆盖的情况 把区间当作括号 () [ ] , 询问时答案为 r 左边 ( 的个数 - l左边 ) 的个数 ,求前缀和,以及更新 #include <iostream> #i
阅读全文
#10114. 「一本通 4.1 例 2」数星星 Stars
摘要:给定 n 个点,定义每个点的等级是在该点左下方(含正左、正下)的点的数目,(输入按照y值递增给出) 统计每个等级有多少个点 输入按照y值递增给出,y坐标是没有用的(脑补 直接求前缀和,然后更新 注意x,y坐标从0开始,所以处理一下 +1 #include <iostream> #include <c
阅读全文