摘要: 解题思路: 将矩阵每一行建立一棵线段树,进而变成一维问题求解。注意数组要开 4*N 代码如下: 阅读全文
posted @ 2016-11-09 11:28 kiraa 阅读(242) 评论(0) 推荐(0) 编辑
摘要: 以上代码思路详见白书即(刘汝佳《算法竞赛经典训练指南》)第三章线段树部分,需要注意的是: 1.set操作时需要将该结点add标识清除 2.pushdown操作以及maintain操作的位置 3.其他方面的问题详见代码 阅读全文
posted @ 2016-11-09 11:13 kiraa 阅读(3217) 评论(0) 推荐(0) 编辑
摘要: 1 int pa[maxn]; 2 for(int i = 0; i < maxn; i++) pa[i] = i; 3 int findpa(int x) {return pa[x] != x ? findpa(pa[x]) : x;} 阅读全文
posted @ 2016-10-10 17:40 kiraa 阅读(106) 评论(0) 推荐(0) 编辑
摘要: 1 //求解模方程 a^x = b(mod n) n为素数,无解返回-1 2 int log_mod(int a, int b, int n) { 3 int m, v, e = 1, i; 4 m = (int) sqrt(n+0.5); 5 v = inv(pow_mod(a, m, n), n); 6 map x; 7 x[1] = ... 阅读全文
posted @ 2016-09-07 12:29 kiraa 阅读(485) 评论(0) 推荐(0) 编辑
摘要: 1 //n个方程,x=a[i](mod m[i]) 2 3 LL china(int n, int *a, int *m) { 4 LL M = 1, d, y, x = 0; 5 for(int i = 0; i < n; i++) M *= m[i]; 6 for(int i = 0; i < n' i++) { 7 LL w = ... 阅读全文
posted @ 2016-09-05 11:23 kiraa 阅读(128) 评论(0) 推荐(0) 编辑
摘要: //计算欧拉phi函数,phi(n)为不超过n且与n互素的整数个数 int euler_phi(int n) { int m = (int)sqrt(n+0.5); int ans = n; for(int i = 2; i 1) ans = ans / n * (n-1); return ans; } //用类似筛法计算phi_table int... 阅读全文
posted @ 2016-08-21 09:34 kiraa 阅读(156) 评论(0) 推荐(0) 编辑
摘要: LL pow_mod(LL a, LL p, LL m) { if(p == 0) return 1; LL ans = pow_mod(a, p/2, m); ans = ans * ans % m; if(p % 2) ans = ans * a % m; return ans; } 阅读全文
posted @ 2016-08-13 09:05 kiraa 阅读(117) 评论(0) 推荐(0) 编辑
摘要: //gcd LL gcd(LL a, LL b) { return b == 0 ? a : gcd(b, a%b); } //exgcd void exgcd(LL a, LL b, LL &d, LL &x, LL &y) { if(!b) {d = a; x = 1; y = 0;} else {gcd(b, a%b, d, y, x); y -= x*(a... 阅读全文
posted @ 2016-08-13 09:00 kiraa 阅读(120) 评论(0) 推荐(0) 编辑
摘要: 1 int vis[maxn]; 2 int prime[maxn]; 3 4 void sieve(int n) { 5 int m = sqrt(n + 0.5); 6 memset(m, 0, sizeof m); 7 for(int i = 2; i <= m; i++) if(!vis[i]) 8 for(int j = i*i... 阅读全文
posted @ 2016-08-13 08:54 kiraa 阅读(94) 评论(0) 推荐(0) 编辑
摘要: 解题思路: 分解质因数只用筛10^5以内的素数即可,别忘了将大于10^5的质因子另外存储。 阅读全文
posted @ 2016-06-08 00:59 kiraa 阅读(255) 评论(0) 推荐(0) 编辑