摘要:
932D - Tree 思路: 树上倍增 anc[i][u]:u的2^i祖先 mx[i][u]:u到它的2^i祖先之间的最大值,不包括u pre[i][u]:以u开始的递增序列的2^i祖先 sum[i][u]:以u开始递增序列从u到2^i祖先的和,不包括u 代码: 阅读全文
摘要:
939E - Maximize! 思路: 贪心:最后的集合是最大值+前k小个 因为平均值时关于k的凹形函数,所以可以用三分求最小值 又因为后面的k肯定比前面的k大,所以又可以双指针 三分: 双指针: 阅读全文
摘要:
940E - Cashback 思路: dp+rmq 可以证明最后划分的区间可以由长度为1和长度为c的区间组成的,这样就可以用O(n)的dp求了,区间最小值随便拿什么维护都可以 状态:dp[i]表示到i这个位置为止的最小划分和 初始状态:dp[0]=0 目标状态:dp[n] 状态转移:dp[i]=m 阅读全文
摘要:
937D - Sleepy Game 思路: dfs。 vis[u][0]==1表示u这个点能从s点偶数路径到达 vis[u][1]==1表示u这个点能从s点奇数路径到达 这个样就能保证dfs时每个点最多被访问2次 那么如果存在一个点u,vis[u][1]==1且u的出度为0,那么就存在能Win的方 阅读全文
摘要:
458C - Elections 思路: 三分凹形函数极小值域 代码: 阅读全文
摘要:
934D - A Determined Cleanup 思路: 找规律,和k进制的求法差不多,答案的奇数位是p%k,偶数位如果p%k!=0,那么答案是k-p%k,否则为0。 代码: 阅读全文
摘要:
934C - A Twisty Movement 思路:dp 很容易想到要预处理出1的前缀和pre[i]和2的后缀和suf[i] 然后枚举区间,对于每个区间如果能求出最长递减序列的长度,那么就能更新答案了 这个用dp求 状态: dp[i][j][0]表示i--j区间以2结尾的最长递减序列长度,很明显 阅读全文
摘要:
36B - Fractal 思路:分形 代码: 阅读全文
摘要:
374C - Inna and Dima 思路:dfs+记忆化搜索 代码: 阅读全文
摘要:
374D - Inna and Sequence 思路: 树状数组+二分 因为被删的点最多N=1e6个,所以复杂度N*logN*logN 前段时间做过一道一样的题,这类题基本套路二分找没删除前的位置 代码: 阅读全文
摘要:
#pragma GCC optimize(2)#pragma comment(linker, "/stack:200000000") #pragma GCC optimize("Ofast,no-stack-protector") #pragma GCC target("sse,sse2,sse3, 阅读全文
摘要:
E - Connected Components? 思路: 补图bfs,将未访问的点存进set里 代码: 阅读全文
摘要:
920G - List Of Integers 思路:容斥+二分 代码: 阅读全文
摘要:
1.求1--r中与n互质的数的个数 位运算版: dfs版: 注意容斥和上面的相反,t==0的时候加了r,所以可以直接出结果 参考:http://blog.csdn.net/acdreamers/article/details/9721139 阅读全文
摘要:
2B - The least round way 思路: dp。 先算出每个数2因子的个数,和5因子的个数 因为要出现0那么要1个2乘1个5,那么最后的答案是min(2的个数,5的个数) 所以我们可以分开考虑,先算出使2最小的方案,再算出使5最小的方案,然后再取最小就可以了。 注意特判一种情况,如果 阅读全文
摘要:
黄老师的博客http://hzwer.com/8053.html 模板: 数列分块入门 1 #include<bits/stdc++.h> using namespace std; #define ll long long #define pb push_back #define mem(a,b) 阅读全文
摘要:
920F - SUM and REPLACE 思路1: 线段树(982 ms) 每个点最多更新6次 代码: 思路2: 分块(1326 ms) 每个块最多更新6次 代码: 阅读全文