摘要:        
二分mid,然后用1~mid的操作在差分序列上加减,最后把差分序列前缀和起来,看是否有有超过初始r值的 线段树,模拟即可,洛谷上会T一个点(开O2能过)    阅读全文
posted @ 2018-09-13 21:54
lokiii
阅读(279)
评论(0)
推荐(0)
        
            
        
        
摘要:        
和数据备份差不多 设二元组(i,a[i]),开一个大根堆把二元组塞进去,以len排序,每次取出一个二元组 因为单纯的贪心是不行的,所以设计一个“反悔”操作。 记录二元组的前驱pr后继ne,把拿出来的二元组的len加进答案,然后把当前二元组和它的前驱后继当成一个,也就是len[x]=a[pr[x]]+    阅读全文
posted @ 2018-09-13 21:23
lokiii
阅读(164)
评论(0)
推荐(0)
        
            
        
        
摘要:        
不难想,就是处理起来比较麻烦 设f[i][j][k]为是否可以把区间(i,j)合并为k,初始状态是f[i][j][s[i]]=1,转移的话另一段枚举长度x,向(i x,j),(i,j+x)转移 把四个字符hash成1234比较好写(大概 cpp include include include usi    阅读全文
posted @ 2018-09-13 20:45
lokiii
阅读(126)
评论(0)
推荐(0)
        
            
        
        
摘要:        
裸的点分治,运算在模3下进行然后统计答案的时候统计余1的\ 余2的\ 2+余0的^2 cpp include include using namespace std; const int N=20005; int n,h[N],cnt,ans,rt,sum,si[N],hs[N],de[N],t[5    阅读全文
posted @ 2018-09-13 19:25
lokiii
阅读(84)
评论(0)
推荐(0)
        
            
        
        
摘要:        
二分值mid,然后把 =mid的赋值为1,其他赋值为0,每次排序就是算出区间内01的个数,然后分别把0和1放到连续的一段内,这些都可以用线段树来维护 二分的判断条件是操作完之后q位置上是否为1 cpp include include using namespace std; const int N=    阅读全文
posted @ 2018-09-13 18:53
lokiii
阅读(101)
评论(0)
推荐(0)
        
            
        
        
摘要:        
很明显的暗示,就是在树的dfs序上维护树状数组,加减的时候差分即可 cpp include include include include using namespace std; const int N=500005; int n,m,h[N],cnt,s[N],top,tot,t[N],fa[N    阅读全文
posted @ 2018-09-13 17:31
lokiii
阅读(130)
评论(0)
推荐(0)
        
            
        
        
摘要:        
……我真是太非了,自己搞了7个质数都WA,从别人那粘5个质数就A了…… 就是直接枚举解,用裴蜀定理计算是否符合要求,因为这里显然结果很大,所以我们对多个质数取模看最后是不是都为0 cpp include include include include using namespace std; con    阅读全文
posted @ 2018-09-13 17:05
lokiii
阅读(149)
评论(0)
推荐(0)
        
            
        
        
摘要:        
其实就是 n~n中求选k个不同的数,和为0的方案数 学到了新姿势叫整数划分,具体实现是dp 详见:https://blog.csdn.net/Vmurder/article/details/42551603 设f[i][j]为j个数和为i的方案数,然后因为互不相同,所以转移的话有两种,就是当前j个数    阅读全文
posted @ 2018-09-13 16:48
lokiii
阅读(259)
评论(0)
推荐(0)
        
            
        
        
摘要:        
处理出一个序列c,a[i] b,c[i]=1;a[i]==b,c[i]=0;a[i] include using namespace std; const int N=200005; int n,a[N],b,w,s[N],mp[N],ans; int read() { int r=0,f=1; c    阅读全文
posted @ 2018-09-13 15:33
lokiii
阅读(126)
评论(0)
推荐(0)
        
            
        
        
摘要:        
首先很容易计算对于一个如意郎君列表里有x个男性的女性,编号排第i位的男性被选的概率是 $$ p (1 p)^{i 1}+p (1 p)^{i 1+n}+p (1 p)^{i 1+n}+… $$ $$ =p ((1 p)^{i 1}+(1 p)^{i 1+n}+(1 p)^{i 1+n}+…) $$     阅读全文
posted @ 2018-09-13 15:06
lokiii
阅读(156)
评论(0)
推荐(0)
        
            
        
        
摘要:        
有趣啊 先spfa分别求出以s1,t1,s2,t2为起点的最短路,然后把在s1 t1或者s2 t2最短路上的边重新建有向图,跑拓扑最长路即可 cpp include include include include include using namespace std; const int N=15    阅读全文
posted @ 2018-09-13 11:44
lokiii
阅读(112)
评论(0)
推荐(0)
        
            
        
        
摘要:        
合并中间那块的时候没取max……WAWAWA 在线段树上维护一堆东西,分别是len区间长度,sm区间内1的个数,ll0区间从左开始最长连续0,ml0区间中间最长连续0,rl0区间从右开始最长连续0,ll1区间从左开始最长连续1,ml1区间中间最长连续1,rl1区间从右开始最长连续1(起始这六个东西可    阅读全文
posted @ 2018-09-13 11:18
lokiii
阅读(180)
评论(0)
推荐(0)
        
            
        
        
摘要:        
调死我了…… 首先观察移动方式,需要移动的格子每次移动到相邻格子,一定是先把空白格子挪过去,所以我们得到一种做法,就是bfs预处理出每一个格子的四联通格子之间的空白格子移动距离建边,注意这个移动是不能经过当前枚举的中心格子的,然后把中心格子和它的四联通格子建边权为1的边 注意这里用来建边的点,是(x    阅读全文
posted @ 2018-09-13 09:27
lokiii
阅读(266)
评论(0)
推荐(0)
        
 
                    
                     
                    
                 
                    
                
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号