正题 题目链接:https://www.luogu.com.cn/problem/P5163 题目大意 给出\(n\)个点\(m\)条有向边,点有权值,要求支持操作 删除一条边 修改一个点的权值 求一个点所在强连通分量中前\(k\)大权值和 \(1\leq n\leq 10^5,1\leq m,q\leq 2\times 10^5\) 解题思路 首先删边肯定是时光倒流改成加边,然后考虑怎么继续做. 我们需要处理一些点集什么时候合并,这样的合并其实不会超过\(n-1\)次. 而且每次肯定是合并某条…
传送门 细节要人命.jpg 这题思路太新奇了--首先不难发现可以倒着做变成加边,但是它还需要我们资瓷加边的同时维护强连通分量.显然加边之后暴力跑是不行的 然后有一个想法,对于一条边\((u,v)\),如果所有加入时间在\((0,t)\)之间的边能够使\(u,v\)在同一个强连通分量里,那么\((u,v)\)这条边的成立时间就是最小的满足条件的\(t\). 对于每一个强联通分量维护一棵权值线段树,修改的话就是一个权值出现次数\(+1\),另一个\(-1\),找前\(k\)大的总和可以类似于主席树的…
题目大意 有一个简单有向图.每个点有点权. 有三种操作: 修改点权 删除一条边 询问和某个点在同一个强连通分量中的点的前 \(k\) 大点权和. \(n\leq 100000,m,q\leq 200000\) 题解 把操作反过来,每次只有加边操作. 用线段树维护同一个强连通分量内的点的点权. 用整体二分去计算每条边的两个端点被合并的时间. 每次把加入时间 \(\leq tmid\) 的边拿出来跑一次 tarjan,就可以知道哪些边在 \(\leq tmid\) 的时间内被缩掉了. 用带撤回的并查…
3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 6265  Solved: 2060[Submit][Status][Discuss] Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是多少. Input 第一行N,M接下来M行,每行形如1 a…
传送门 没想出来→_→ 首先不难看出要差分之后计算不相交也不相邻的相等子串对数,于是差分之后建SAM,在parent树上用线段树合并维护endpos集合,然后用启发式合并维护一个节点对另一个节点的贡献,于是总的时间复杂度为\(O(n\log^2n)\) //minamoto #include<bits/stdc++.h> #define R register #define ll long long #define IT vector<int>::iterator #define…
Bizon the Champion has recently finished painting his wood fence. The fence consists of a sequence of n panels of 1 meter width and of arbitrary height. The i-th panel's height is hi meters. The adjacent planks follow without a gap between them. Afte…
和dynamic rankings这道题的思想一样 只不过是把树状数组换成线段树区间修改,求第$K$大的而不是第$K$小的 这道题还有负数,需要离散 #include <vector> #include <cstdio> #include <cstring> #include <algorithm> #define N1 50500 #define M1 100500 #define ll long long #define dd double #defin…
Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是多少. Input 第一行N,M 接下来M行,每行形如1 a b c或2 a b c Output 输出每个询问的结果 Sample Input 2 5 1 1 2 1 1 1 2 2 2 1 1 2 2 1 1 1 2 1 2 3 Sample Output 1 2 1 HINT…
首先不用说,倒着操作.整体二分来做强连通分量,然后线段树合并,这题就做完了. // powered by c++11 // by Isaunoya #include <bits/stdc++.h> #define rep(i, x, y) for (register int i = (x); i <= (y); ++i) #define Rep(i, x, y) for (register int i = (x); i >= (y); --i) using namespace st…
只有洛谷的毒瘤才会在毒瘤月赛里出毒瘤题...... 题意:三个操作,删边,改变点权,求点x所在强连通分量内前k大点权之和. 解:狗屎毒瘤数据结构乱堆...... 整体二分套(tarjan+并查集) + 线段树合并. 首先可以变成加边. 然后就是神奇操作让人难以置信...... 对于每条边,我们有个时刻t使得它的两端点在同一scc内.那么如何求出这个t呢? 整体二分!...这又是怎么想到的啊...... 对于一个时刻mid,我们把小于它的边提取出来缩点,如果有的边两端点在一个scc,那么它的t就不…