12 2017 档案
摘要:【题解】 用Treap维护这个序列。 加入的时候直接插入到末尾,这样Treap就变成一棵以插入时间先后为排序关键字的二叉搜索树。 对于翻转操作,我们分裂出需要翻转的区间,给这个区间的root打一个翻转标记。 在分裂、合并、输出的时候,遇到翻转标记,就把左右儿子交换,同时下传标记。 1 #includ
阅读全文
摘要:【题意概述】 要求维护一个序列支持以下操作: 1,插入元素x; 2,把序列的所有元素加上x; 3,把序列的所有元素减去x,同时低于一个给定的下限的元素马上被删除; 4,询问序列中第k大的元素。 【题解】 Treap 用一个delta记录元素的增减情况,即实际上的元素的值应该是qval(root,x)
阅读全文
摘要:【题解】 treap模板题,直接用Treap维护前驱、后继,每次找到更接近当前val的加上就好了。 1 #include<cstdio> 2 #include<algorithm> 3 #define ls (a[u].l) 4 #define rs (a[u].r) 5 #define LL lo
阅读全文
摘要:【题解】 二分答案+差分 本题要求出尽量小的威力值P,很容易想到二分答案 而本题难点在于二分答案之后的检验。每发子弹对一个区间造成影响,我们可以尝试使用差分。但每发子弹对区间不同位置的影响是不同的。因此我们可以用多阶差分。 1 #include<cstdio> 2 #include<algorith
阅读全文
摘要:【题意】给出一个n个数的序列,要求取出互补相邻的m个数,使得它们的和最大。 【算法】贪心,堆 【题解】 每次取出最大的a,并且把a[i]设为a[pre[i]]+a[nxt[i]]-a[i] 这种做法类似于给贪心一个反悔的机会,这个反悔的机会实质上是扩大你选择数字的影响范围,一旦扩大就一定不会反悔,因
阅读全文
摘要:洛谷3377 可以轻松改成斜堆等可并堆 1 #include<cstdio> 2 #include<algorithm> 3 #define ls(x) (a[x].ls) 4 #define rs(x) (a[x].rs) 5 using namespace std; 6 int n,m,tot,
阅读全文
摘要:洛谷3919 支持如下操作: 在某个历史版本上修改某一个位置上的值 1 #include<cstdio> 2 #include<algorithm> 3 #define ls(x) (a[x].ls) 4 #define rs(x) (a[x].rs) 5 #define mid ((l+r)>>1
阅读全文
摘要:洛谷3834 主席树入门题,静态区间第k小 权值线段树:一棵线段树的叶子tree[L=R]节点记录序列中满足a[i]=L=R的数的个数,非叶子节点记录儿子的sum之和; 这样我们就可以快速地求出整个序列的第K小(或第K大) 为了能够查询区间的第K小,我们在序列1~n的每个位置i建立一棵权值线段树,那
阅读全文
摘要:【题意概述】 给你一个n个数的数列,其中某个数出现了超过n div 2次即众数,请你找出那个数。 【题解】 看起来很水。。然而内存限制只有1M 所以要用一点小技巧 因为众数出现的次数超过n/2,所以我们可以把每个数和不一样的数抵消,最后剩下的数一定就是众数 我们用cnt记录目前的众数出现的次数,当目
阅读全文
摘要:洛谷3835 1 #include<cstdio> 2 #include<algorithm> 3 #include<cstdlib> 4 #define ls (a[u].l) 5 #define rs (a[u].r) 6 #define R (root[Ver]) 7 #define upda
阅读全文
摘要:对每种颜色开一个二维树状数组 1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 const int maxn=310; 5 int t[110][maxn][maxn],c[maxn][maxn],Q,n,m,k,x,
阅读全文
摘要:【题解】 二分答案 在计算前缀和时减去mid,即s[i]=s[i-1]+a[i]-mid 这样只要有s[i]-s[j]>=0,且i-j>=m,那么mid就是符合条件的 用Min记录s[0]~s[i-m]中最小的s,即可做到O(n)判断 1 #include<cstdio> 2 #include<al
阅读全文
摘要:【题意概述】 现有n个砝码,重量分别为a1,a2,a3,……,an,在去掉m个砝码后,问最多能称量出多少不同的重量(不包括0)。 【题解】 先DFS决定用哪些砝码,然后DP求可以称出的重量有多少种 1 #include<cstdio> 2 #include<algorithm> 3 #include
阅读全文
摘要:洛谷1583 1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 const int maxn=1000; 5 int n,x; 6 double a[maxn][maxn]; 7 inline void read(in
阅读全文
摘要:1.洛谷1531 点修改,查询区间最大值 1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #define ls (cur<<1) 5 #define rs (cur<<1|1) 6 #define mid ((a[cur
阅读全文