摘要: 【算法】状态压缩型DP 【题解】 Q=tx+(t-1)y 对于Q≥t(t-1),x,y一定有解。 所以当两石子间距离long>t(t-1)时,令long=t(t-1),重新构造数组即可。 【注意】 1.输入的石子位置无序,要排序。 2.当s=t时特判。 3.最终解要在n~n+t中找最小值(不过数据太 阅读全文
posted @ 2016-09-12 12:55 ONION_CYC 阅读(293) 评论(0) 推荐(0) 编辑
摘要: 【算法】线段树||二分+前缀和 【题解】线段树记录区间加值和区间最大值。 #include<cstdio> #include<algorithm> using namespace std; const int maxn=1e6; struct treess{int l,r,ms,delta;}t[m 阅读全文
posted @ 2016-09-05 13:07 ONION_CYC 阅读(277) 评论(0) 推荐(0) 编辑
摘要: 【算法】线段树 【题解】 学自:https://vijos.org/p/1083/solution(wang_yanheng的回答) 回溯时维护一段区间的以下域: sumL:从左端点起连续区间的最大和 sumR:从右端点起连续区间的最大和 sum:整段区间的和 subSum:最大子区间和 以上域在叶 阅读全文
posted @ 2016-08-22 11:50 ONION_CYC 阅读(251) 评论(0) 推荐(0) 编辑
摘要: 【算法】线段树 【题解】区间加上同一个数+区间查询最大值。注意和谐值可以是负数,初始化ans为负无穷大。 #include<cstdio> #include<algorithm> using namespace std; const int maxn=100010,ainf=-0x3f3f3f3f; 阅读全文
posted @ 2016-08-21 11:33 ONION_CYC 阅读(230) 评论(0) 推荐(0) 编辑
摘要: 【题意】两种操作,[L,R]种新的树(不覆盖原来的),或查询[L,R]树的种类数。n<=50000。 【算法】树状数组||线段树 【题解】这题可以用主席树实现……不过因为不覆盖原来的,所以有更简单的方法。 括号法,对于每个K=1的操作标记左右括号的位置。 对于每个K=2的操作,答案就是right前面 阅读全文
posted @ 2016-08-18 20:43 ONION_CYC 阅读(442) 评论(0) 推荐(1) 编辑
摘要: 【算法】线段树 【题解】将所有坐标按x(第一)和y(第二)从小到大排序,再按顺序插入线段树,即在线段树中将y坐标位置+1,这样就能保证每个坐标能包含的点一定先被处理了,每次询问查询1...a[i].y区间的和。 #include<cstdio> #include<algorithm> using n 阅读全文
posted @ 2016-08-18 11:06 ONION_CYC 阅读(248) 评论(0) 推荐(0) 编辑
摘要: 【算法】线段树 【注意】修改或查询区间时,若区间能包含某棵子树就立即返回,否则线段树就失去了意义。 #include<cstdio> #include<algorithm> using namespace std; const int inf=0x3f3f3f3f; struct treess{in 阅读全文
posted @ 2016-08-17 10:19 ONION_CYC 阅读(288) 评论(0) 推荐(0) 编辑
摘要: 【算法】线段树 #include<cstdio> #include<algorithm> using namespace std; struct treess{int l,r,ms;}t[400010]; const int maxn=200010,inf=0x3f3f3f3f; int a[max 阅读全文
posted @ 2016-08-17 08:31 ONION_CYC 阅读(194) 评论(0) 推荐(0) 编辑
摘要: 【题意】 恰逢H国国庆,国王邀请n位大臣来玩一个有奖游戏。首先,他让每个大臣在左、右 手上面分别写下一个整数,国王自己也在左、右手上各写一个整数。然后,让这n位大臣排 成一排,国王站在队伍的最前面。排好队后,所有的大臣都会获得国王奖赏的若干金币,每 位大臣获得的金币数分别是:排在该大臣前面的所有人的 阅读全文
posted @ 2016-08-14 11:41 ONION_CYC 阅读(341) 评论(0) 推荐(0) 编辑
摘要: 【算法】模拟 #include<cstdio> #include<cstring> const int maxm=1010; char sm[maxm],key[maxm],s[maxm]; int len,lenk; bool isbig(char c) {return c>='A'&&c<='Z 阅读全文
posted @ 2016-08-14 09:14 ONION_CYC 阅读(335) 评论(0) 推荐(0) 编辑
摘要: 【算法】快速幂运算 【题解】ans=(m*10^k+x)%n,用快速幂计算10^k即可,复杂度为O(log k)。 #include<cstdio> long long n,m,k,x,ans; long long quickpow(long long x,long long n,long long 阅读全文
posted @ 2016-08-13 21:40 ONION_CYC 阅读(226) 评论(0) 推荐(1) 编辑
摘要: 【算法】动态规划+后缀表达式 【题解】 先把算式转为后缀表达式后进行DP 令f[s][0]表示使表达式答案为0的方案数 f[s][1]表示使表达式答案为1的方案数 (加法) f[a+b][1]=f[a][0]*f[b][1]+f[a][1]*f[b][0]+f[a][1]*f[b][1] f[a+b 阅读全文
posted @ 2016-08-13 20:23 ONION_CYC 阅读(997) 评论(1) 推荐(1) 编辑
摘要: 【算法】DP||贪心 【题解】 (1)动态规划: 令f[i][0..1]为两种条件下前i株花的最大保留数量,状态转移方程: f[i][0]=max(f[j][1]+1) (j=i-1...1)(h[i]>h[j]) f[i][1]=max(f[j][0]+1) (j=i-1...1)(h[i]<h[ 阅读全文
posted @ 2016-08-13 09:13 ONION_CYC 阅读(624) 评论(0) 推荐(0) 编辑
摘要: 【算法】找规律(听说还有写RMQ的www) 【题解】ans+=(a[i]-a[i-1]) (i=1...n)(a[i]>a[i-1]) 后面比前面大k,说明要新叠加k个区间来达到所需高度。(看似很复杂的区间覆盖问题,从前往后扫描就很容易得到贪心策略) #include<cstdio> int n,a 阅读全文
posted @ 2016-08-13 07:53 ONION_CYC 阅读(228) 评论(0) 推荐(0) 编辑
摘要: 【算法】最小生成树 #include<cstdio> #include<algorithm> using namespace std; const int maxn=310; struct cyc{int from,to,pre,k;}e[100010]; int fa[maxn],head[max 阅读全文
posted @ 2016-08-12 21:58 ONION_CYC 阅读(227) 评论(0) 推荐(0) 编辑
摘要: 【算法】最大生成树+LCA(倍增) 【题解】两点间选择一条路径最小值最大的路径,这条路径一定在最大生成树上,因为最大生成树就是从边权最大的边开始加的。 先求原图的最大生成树(森林),重新构图,然后用一个超级根连向每棵树的根。 对于每个询问,在树上跑z=LCA(x,y),答案就是x到z,z到y路上的最 阅读全文
posted @ 2016-08-12 21:46 ONION_CYC 阅读(259) 评论(0) 推荐(0) 编辑
摘要: 【算法】贪心 【题解】如果看重一对,先选择其中一个点,该点相邻最大的肯定被选走。所以答案就是最大的[所有点的次大连边点]啦。 #include<cstdio> #include<algorithm> #include<cmath> #include<cctype> #include<cstring> 阅读全文
posted @ 2016-08-12 21:27 ONION_CYC 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 【算法】数论 【题解】均分的本质是A整除B,A整除B等价于A的质因数是B的子集。 1.将m1分解质因数,即m1=p1^a1*p2^a2*...*pk^ak 所以M=m1^m2=p1^(a1*m2)*p2^(a2*m2)*...*pk^(ak*m2) 2.如果s[i](细胞初始个数)不能被M分解出来的 阅读全文
posted @ 2016-08-12 21:15 ONION_CYC 阅读(744) 评论(0) 推荐(0) 编辑
摘要: 【算法】 【算法】网络流 【算法】树 【算法】数学 ————【专题】生成树计数(矩阵树定理) ————【专题】计数问题(排列组合,容斥原理,卡特兰数) ————【算法专题】卡特兰数(计数数列) ————【专题】数论 ————【专题】概率和期望 【算法】动态规划 【算法】数据结构 ————【专题】平衡 阅读全文
posted @ 2016-08-10 21:08 ONION_CYC 阅读(2061) 评论(0) 推荐(6) 编辑
摘要: 【算法】二维树状数组 【题解】 1.树状数组尽量不要出现0,因此所有坐标+1 2.面积求法(默认1开始):(x1,y1)(x2,y2)=sum(x2,y2)-sum(x1-1,y2)-sum(x2,y1-1)+sum(x1-1,y1-1)[sum表示(1,1)(x,y)] 原来这个也算树套树……树状 阅读全文
posted @ 2016-08-10 16:02 ONION_CYC 阅读(229) 评论(0) 推荐(0) 编辑