上一页 1 ··· 28 29 30 31 32 33 34 35 36 ··· 38 下一页
摘要: 注意到随机一组贪心解得到的团的大小不小于$\frac{N}{3}$的概率是很大的,所以一直随机下去,直到找到一组解即可,随机次数是常数级别的,所以复杂度为$O(n^2)$。#include#include#define N 3010int n,m,i,j,k,a[N],del[N],fin[N];b... 阅读全文
posted @ 2015-06-16 22:35 Claris 阅读(327) 评论(0) 推荐(0) 编辑
摘要: 求本质不同的第k小子串:求出后缀数组,从0开始扫到n-1,到sa[i]为止一共有sum[i]个本质不同的子串sum[i]=sum[i-1]+n-sa[i]-height[i]直到sum[i]>=k为止求第k小子串:构造后缀树,设f[x]表示以x为前缀的子串数目,g[x]表示以x为前缀的后缀数目查询时... 阅读全文
posted @ 2015-04-21 16:36 Claris 阅读(631) 评论(0) 推荐(0) 编辑
摘要: 若所有点同侧则表明将各个点带入直线解析式ax+by-c后得到的值均同号等价于最大值和最小值同号考虑CDQ分治,每一步分治的过程中求出上下凸壳,然后三分答案即可时间复杂度$O(n\log^2n)$#include#includetypedef long long ll;const int N=2000... 阅读全文
posted @ 2015-04-17 13:59 Claris 阅读(449) 评论(0) 推荐(0) 编辑
摘要: 设f[i][j]表示到(i,j)的方案数,则有$f[i][j]=\sum f[x][y](xconst int N=752,P=1000000007;int n,m,k,i,j,a[N][N],f[N][N],T,all,s[N*N],v[N*N];inline void read(int&a){c... 阅读全文
posted @ 2015-04-17 13:58 Claris 阅读(755) 评论(0) 推荐(0) 编辑
摘要: 百度空间马上要关闭了呢,赶紧转移到这里。。。 阅读全文
posted @ 2015-04-08 18:16 Claris 阅读(686) 评论(5) 推荐(0) 编辑
摘要: 当m取2时,k至少为$\frac{n}{2}$所以在最优解中每个数被选中的概率至少为$\frac{1}{2}$每次随机选取一个位置i,计算出其它数与$a_i$的差值,将差值分解质因数所有质因数中出现次数的最大值加上与$a_i$相等的数的个数就是选取i的情况下的最优解为了最大化m,需要将所有相同位置的... 阅读全文
posted @ 2015-03-12 18:30 Claris 阅读(706) 评论(0) 推荐(1) 编辑
摘要: f[i]表示用i集合内的电影可以达到的最长时间f[i]向f[i|(1#includeconst int N=20,M=40010;int n,l,i,j,c,d[N],g[N][M],m,q[M],id[M],t[M],f[1b)ans=b;}inline void max(int&a,int b)... 阅读全文
posted @ 2015-02-27 20:25 Claris 阅读(435) 评论(0) 推荐(0) 编辑
摘要: 对于询问(x,y),恰经过一条非树边且不经过树上两点间路径的路径数为:·若x与y成祖先-孩子关系,假设y是x的祖先,z是y到x方向的第一个节点,则 ans=起点在x的子树里,且终点不在z的子树里的非树边数·若x与y不成祖先-孩子关系,则 ans=起点在x的子树里,且终点在y的子树里的非树边数由于不经... 阅读全文
posted @ 2015-02-26 11:28 Claris 阅读(531) 评论(3) 推荐(0) 编辑
摘要: 暴力枚举答案然后检验。#includeint n,m,i,j,k,a[100],b[100],cnt,ans;char s[20];int main(){ for(scanf("%d%d",&n,&m);i1)break;ans=i;} } if(cnt==1)for(i=0;i>i&1));... 阅读全文
posted @ 2015-02-15 10:20 Claris 阅读(190) 评论(0) 推荐(0) 编辑
摘要: 考虑离线,将删边操作倒过来变成加边,等价于询问每个点什么时候与1连通使用并查集维护,每次合并时如果有一边是1所在连通块,就把另一边的所有点的答案更新#include#define N 200010int n,m,i,j,x,y,son[N][2],del[N][2],q[N='0')&&(c='0'... 阅读全文
posted @ 2015-02-14 22:46 Claris 阅读(491) 评论(0) 推荐(0) 编辑
摘要: 按距离建立线段树,维护区间重量最小值然后跑一遍拓扑,每次将所有能取的加入队尾#include#include#define N 250010typedef long long ll;int n,i,x0,y0,nowp,x,y,r,c,v[N='0')&&(c='0')&&(c>1].d>1; b... 阅读全文
posted @ 2015-02-14 15:04 Claris 阅读(449) 评论(0) 推荐(0) 编辑
摘要: 令三元环(i,j,k)中i>j>k,则每条边只需要从大点连向小点设d[x]表示从x连出的边的条数从1到n枚举点i,然后枚举所有与i相连的边(i,x)(x#includeusing namespace std;const int N=100010,M=250010,B=(1e[M];inline vo... 阅读全文
posted @ 2015-02-06 12:13 Claris 阅读(791) 评论(0) 推荐(2) 编辑
摘要: $|x_1-x_2|+|y_1-y_2|=\max(|(x_1+y_1)-(x_2+y_2)|,|(x_1-y_1)-(x_2-y_2)|)$将坐标$(x,y)$逆变换为$(\frac{x+y}{2},\frac{x-y}{2})$后,询问[l,r]的最优解为中位数离散化后用主席树支持查询#incl... 阅读全文
posted @ 2015-02-05 17:27 Claris 阅读(281) 评论(0) 推荐(0) 编辑
摘要: 首先询问i相当于询问a[j]>=a[i],b[j]>=b[i]的j如果b[j]==b[i],那么a[j]>a[i],这种情况先用set处理掉如果b[j]>b[i],那么a[j]>=a[i],离散化后CDQ分治,用树状数组记录前缀最大值即可时间复杂度$O(n\log^2n)$#include#incl... 阅读全文
posted @ 2015-02-04 20:44 Claris 阅读(263) 评论(0) 推荐(0) 编辑
摘要: $f[n]\bmod q=p^{Fib[n]}\bmod q=p^{Fib[n]\bmod\varphi(q)}\bmod q$首先线性筛预处理出所有素数,然后对于每次询问,求出$\varphi(q)$,再用矩阵快速幂求出Fib[n],最后用快速幂求答案即可。#includetypedef long... 阅读全文
posted @ 2015-02-04 20:23 Claris 阅读(257) 评论(0) 推荐(0) 编辑
摘要: 二分答案$x$表示最大的一段的和。 设$f[i]$表示前$i$个最多分几段,满足最大的一段不超过$x$,若$f[n]\geq k$,则可行, 则$f[i]=\max(f[j])+1,sum[i]-sum[j]\leq x$。 用Treap优化DP,$O(n\log^2n)$。 同理再次二分得到最小的 阅读全文
posted @ 2015-02-01 20:42 Claris 阅读(721) 评论(0) 推荐(0) 编辑
摘要: 从左往右维护两个指针l,r表示离i最近的k个点的区间,预处理出每个点出发的后继,然后倍增。#includetypedef long long ll;const int N=1000010,BUF=20000000,OUT=8000000;int n,k,i,l=1,r,f[N],g[N],t[N],... 阅读全文
posted @ 2015-02-01 10:23 Claris 阅读(249) 评论(0) 推荐(0) 编辑
摘要: 在线做法:若p不超过100,则可以先预处理,将所有满足a[x]%i=j的x从小到大放进链表q[i][j]中,查询时二分预处理:$O(100n)$查询:$O(\log n)$若p超过100,则满足条件的a[x]一定不超过100种于是维护一个二维数组T,T[i][j]表示在前j个数里多有少个的权值是i为... 阅读全文
posted @ 2015-01-30 12:21 Claris 阅读(273) 评论(0) 推荐(0) 编辑
摘要: CANCEL操作可以看作删点,X坐标可以离散化将询问按Z坐标差分,转化成两个求Z#include#include#define N 600010using std::sort;int n,m,Q,i,j,x,y,z,r,t1,t2,fin[N],L[N],li,k,q[N],t,pos[N],T,C... 阅读全文
posted @ 2015-01-25 20:16 Claris 阅读(435) 评论(0) 推荐(0) 编辑
摘要: 二分答案mid,然后检验是否存在两个相同的mid*mid的正方形检验方法:首先对于每个位置,求出它开始长度为mid的横行的hash值然后对于hash值再求一次竖列的hash值将第二次求出的hash值排序,如果存在两个相同的hash值则可行#include#include#define N 510ty... 阅读全文
posted @ 2015-01-24 21:26 Claris 阅读(470) 评论(0) 推荐(0) 编辑
上一页 1 ··· 28 29 30 31 32 33 34 35 36 ··· 38 下一页