自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

SiriusRen的博客

是不是代码很短<( ̄︶ ̄)>

  • 博客(510)
  • 收藏
  • 关注

原创 这可能是我在CSDN的最后一篇文章了...

本人已搬家到博客园 http://www.cnblogs.com/SiriusRen/小伙伴们都在博客园…我会定时来CSDN转一转的~~~

2017-03-10 18:48:03 845 1

原创 BZOJ 1537 cdq分治

思路: 我只是想写一下cdq…… 二维偏序 一维排序 一维cdq分治 (我忘了归并排序怎么写了,,,) 写了个sort… 复杂度是O(nlog^2n)//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N=100050;#defi

2017-03-08 21:26:01 1025

原创 BZOJ 2794 DP

思路: 考虑把询问离线 按照m排序 物品按照a排序 f[i]表示c[j]的和到i b的最大值 背包就好 O(nk)竟然能过……//By SiriusRen#include <cstdio>#include <algorithm>using namespace std;const int N=1005;struct Ask{int m,k,s,id;}ask[N*N];stru

2017-03-08 21:24:20 471

原创 BZOJ 2729 高精度+组合数学

思路: 考虑 把男生排成一排 女生和老师往里插 分成两种情况. 1. 女生中间夹着老师 2. 女生中间没有夹着老师求一下组合* 阶乘就好了 先放Python代码 简洁易懂def fact(n): temp=1 for i in range(1,n+1): temp*=i return tempdef C(n,m): if(n<m): re

2017-03-08 21:20:15 393

原创 BZOJ 4033 树形DP

http://blog.csdn.net/mirrorgray/article/details/51123741 安利队长blog… 树形dp吧,状态挺显然的,dp[x][j]表示以x为根的子树中,选择了j个黑点的答案,但注意这个答案是整棵树的答案。 我们只需要对于每个儿子背包一遍,在最后更新一下dp[x][j]即可,具体可以看一眼程序。 非常重要的是,这个复杂度是n^2的,需

2017-03-08 21:16:26 506

原创 BZOJ 1196 二分+Kruskal

思路: 二分答案 判一下能不能加//By SirisuRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N=40050;int n,m,k,xx,yy,aa,bb,ans,f[N],top;struct Node{ int from,to,type,

2017-03-04 21:12:37 377

原创 BZOJ 1116 并查集

思路: 如果 每个联通块 边数>=点数 就OK 用并查集搞//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N=100050;int n,m,xx,yy,sizep[N],sizee[N],f[N];int find(int x){re

2017-03-04 21:09:18 290

原创 BZOJ 3522 DFS+DP

思路: f[]表示选1个点的 g[]表示选2个点的 dp一下 ans+=(ll)g[k]*deep[k]; g[k]+=(ll)f[k]*deep[k]; f[k]+=deep[k];//By SiriusRen#include <cstdio>#include <cstring>using namespace st

2017-03-04 21:04:47 333

原创 BZOJ 2929 网络流

题意是啥……. 思路: 不是与1或n连起来的边 边权是1 否则是inf 跑网络流//By SiriusRen#include <queue>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N=66666,inf=0x3f3f3f3f;queue<int>q

2017-03-04 21:03:01 296

原创 BZOJ 1507 splay

写完维修数列 这不是水题嘛233333//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N=5000050;int n,pos=1,ch[N][2],fa[N],size[N],root,xx,cnt;char op[15],ins[N],

2017-03-04 21:01:14 291

原创 BZOJ 1061费用流

思路: 我们可以列出几个不等式 用y0带进去变成等式 下-上 可以消好多东西我们发现 等式左边的加起来=0 可以把每个方程看成一个点正->负 连边 跑费用流即可//By SiriusRen#include <queue>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#de

2017-03-04 20:59:43 285

原创 BZOJ 3991 set维护dfs序

思路: set按照dfn排序 两点之间的距离可以O(logn)算出来 加一个点-> now ans+=dis(pre,now)+dis(now,next)-dis(pre-next); 删一个点同理 最后加上dis(begin,end)即可//By SiriusRen#include <set>#include <cstdio>#include <cstring>#include

2017-03-04 20:56:53 402

原创 BZOJ 4547 矩阵快速幂

思路: 肯定每回只加最大值和次大值如果 一开始的最大值>0且次大值<0 那就一直加 加到次大值>0搞一个矩阵 推斐波那契数列 求和 就好…//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int mod=10000007,N=100050;#de

2017-03-04 20:53:42 318

原创 BZOJ 1500 splay终结版...

GSS系列有一丝丝像… 只不过那个是线段树 这个是splay 翻转 插入 删除啥的就是普通的splay 合在一起了而已//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;struct Tree{ int v,rev,sum,lmax,rmax,ma

2017-03-03 00:37:20 331

原创 BZOJ 2957 分块

思路: 记录每栋楼楼顶与原点连线的斜率 那么一栋楼可见当且仅当前面所有楼的斜率都小于这栋楼 将n栋楼分为√(0.5*n*logn)块 每一块内维护一个单调上升子序列(注意不是LCS) 比如说4 1 2 3 5 那么维护的序列就是4 5 修改的时候块内暴力重建 然后查询顺着块撸一遍 每次记录当前的最大值 然后去下一个块中二分找到第一个比这个最大值大的值 然后统计答案&&更新最大值 from p

2017-03-03 00:30:03 294

原创 BZOJ 2141 分块 线段树

思路: a[i]//By SiriusRen#include <cmath>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N=20050;int n,m,cpy[N],h[N],u,Block,block[N],xx,yy,ans;struct BIT{

2017-03-03 00:23:48 268

原创 BZOJ 4241 分块

思路: 考虑分块 f[i][j]表示从第i块开头到j的最大值 cnt[i][j]表示从第i块开始到序列末尾j出现了多少次 边角余料处理一下就好啦~//By SiriusRen#include <cmath>#include <cstdio>#include <algorithm>using namespace std;const int N=100050;int n,q,Bloc

2017-03-03 00:18:16 406

原创 BZOJ 4129 树上带修莫队+线段树

思路: 可以先做做BZOJ3585 是序列上的mex 考虑莫队的转移 如果当前数字出现过 线段树上把它置成1 对于询问 二分ans 线段树上查 0到ans的和 是不是ans+1 本题就是把它搞到了序列上 带了个修改… 麻烦一点 本质上是一样的//By SiriusRen#include <cmath>#include <cstdio>#include <cstring>#

2017-03-03 00:13:49 451

原创 BZOJ 4028 分块

zrt当年是怎么想到的……. 思路: 考虑把序列分块 对于每块 存xor[i] 表示从本块开头到i的前缀异或和 把它扔进set里 存gcd[i]表示从本块开头到i的前缀gcd. 如果这一块的GCD和整个的gcd的gcd是一样的 从set里找ans 否则暴力.. GCD最多log种 所以是复杂度是O(nsqrt(n)logn)的//By SiriusRen#include

2017-03-03 00:08:25 319

原创 BZOJ 3238 后缀数组+单调栈

单调栈跑两遍求出来 ht[i]为最小值的那段区间//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N=500050;int n,cntA[N],cntB[N],A[N],B[N],sa[N],tsa[N],rk[N],ht[N],stka[N

2017-03-03 00:03:01 329

原创 BZOJ 3323 splay维护序列

就第三个操作比较新颖 转化成 在l前插一个点 把r和r+1合并//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn=100005,mod=20130426;typedef long long ll;struct Tree{

2017-03-02 23:59:52 511

原创 BZOJ 4710 容斥原理+dp

http://www.cnblogs.com/CXCXCXC/p/5093584.html//By SiriusRen#include <cstdio>using namespace std;int n,m,K,mod=1000000007,f[33][33][666][9];int main(){ scanf("%d%d%d",&n,&m,&K); f[1][0][0][0

2017-02-27 23:03:18 626

原创 BZOJ 3195 DP

http://www.cnblogs.com/CXCXCXC/p/5093584.html//By SiriusRen#include <cstdio>using namespace std;int n,m,K,mod=1000000007,f[33][33][666][9];int main(){ scanf("%d%d%d",&n,&m,&K); f[1][0][0][0

2017-02-27 23:02:51 443

原创 BZOJ 3667 Pollard-rho &Miller-Rabin

论O(1)快速乘和O(logn)快速乘的差距….//By SiriusRen#include <cstdio>#include <algorithm>using namespace std;typedef long long ll;ll shai[10]={2,3,5,7,11,13,17,19,23,29};ll mul(ll a,ll b,ll p){ ll d=((long

2017-02-27 22:59:42 619

原创 BZOJ 4522 Pollard-rho+exgcd

思路: N=P*Q 求出来P和Q 模拟就好…//By SiriusRen#include <cstdio>#include <algorithm>using namespace std;typedef long long ll;ll shai[10]={2,3,5,7,11,13,17,19,21,23};ll mul(ll x,ll y,ll mod){ x%=mod;l

2017-02-27 22:57:08 785

原创 BZOJ 3729 splay维护DFS序+博弈论

思路: 这像是 阶梯Nim之类的东西 我们 直接把sg函数 设成mod(L+1)的 一棵子树 向下的奇数层上的石子xor起来 就是答案 有加点和改值的操作 就splay维护一下//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N=1

2017-02-26 16:10:56 663

原创 BZOJ 3720 树分块

借鉴了别人的代码……//By SiriusRen#include <cmath>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define N 66666struct Blocks{ int a[210],size; void Insert(int x){

2017-02-26 13:59:05 340

原创 BZOJ 3052 树上带修莫队

思路: 就是把带修莫队移到了树上 块的大小开到(n^2/3)/2 比较好… 这是一个卡OJ好题 //By SiriusRen#include <cmath>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N=100050;int n,m,q,xx,yy,Blo

2017-02-25 16:28:09 733

原创 BZOJ 2120 带修莫队

思路: 暴力能过的 嘿嘿嘿我是来练带修莫队的嗯 复杂度 O(n^5/3)//By SiriusRen#include <cmath>#include <cstdio>#include <algorithm>using namespace std;const int N=1050000;int n,m,a[N],cnt1,cnt2,Block,block[N],xx,yy,ans,su

2017-02-25 16:24:50 544

原创 Burnside&Polya总结

这里就算是一个小总结吧… 附参考的网址: http://blog.sina.com.cn/s/blog_6a46cc3f0100s2qf.html http://www.cnblogs.com/hankers/archive/2012/08/03/2622231.html 首先 Burnside引理: Burnside引理:即互异状态个数等于各种转换下的等价类个数的和除以转换个数。

2017-02-20 23:46:14 490

原创 BZOJ 2287 DP+容斥

思路: 先处理出来f[j]表示这i个物品都可用 填满容量j的方案数容斥一发处理出来g[j]=g[j-w[i]] 表示i不能用的时候 填满容量j的方案数//By SiriusRen#include <cstdio>using namespace std;int n,m,w[2005],f[2005],g[2005];int main(){ scanf("%d%d",&n,&m),f

2017-02-17 19:46:14 638

原创 BZOJ 2821 分块+二分

题意: N个数,M组询问,每次问[l,r]中有多少个数出现正偶数次。 思路: 把N个数分成sqrt(n)块,预处理d[i][j]表示第i块起点到第j块末尾的答案 枚举起点i,并维护一个数组记录每个数到目前为止出现的次数,从偶变奇、从奇变偶时相应增减答案。 把每个数在数列中出现的位置从小到大排序后放入到一个数组Arr中备用。 读入每个询问[l,r]。如果l和r在同一个块中暴力即可,否则设l

2017-02-15 16:11:01 399

原创 BZOJ 4358 坑 莫队+线段树 死T

这是一个坑 竟然卡nsqrt(n)lognT死 等更//By SiriusRen#include <cmath>#include <cstdio>#include <algorithm>using namespace std;#define Max(x,y) x>y?x:y;const int N=50050,T=50050*8;int n,m,Block,a[N],block[N]

2017-02-15 00:19:37 599

原创 BZOJ 4321 DP

思路: 这个DP太神了… 完全没想到 http://blog.csdn.net/geotcbrl/article/details/49663401//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int n;long long f[1005][1005][2

2017-02-15 00:17:56 549

原创 BZOJ 1786 DP

思路: 肯定从小往大填合适了 f[i][j]表示第i个数是j的最少逆序对数 f[i][j]=min(f[i-1][k]+cost,f[i][j]) 优化一下成O(nk)就好啦~ (不优化也可以过的…)//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;co

2017-02-15 00:16:59 633

原创 BZOJ 3674/BZOJ 3673 主席树

思路: 主席树维护可持久化数组 剩下的就是普通的并查集了…//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N=200050;int n,m,op,xx,yy,L[N*50],R[N*50],tree[N*50],root[N],cnt;

2017-02-15 00:14:59 535

原创 BZOJ 1369 树形DP

思路: f[i][j] 表示节点i 染成j时 子树的最小权值 (我会猜这个j很小 你打我吖~) 随便DP一发就好了 (证明我也不会)//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N=20050,inf=0x3f3f3f3f;int

2017-02-15 00:13:17 406

原创 BZOJ 4184 线段树+高斯消元

思路: 线段树表示的是时间 每回最多log个段 区间覆盖 一直到叶子 的线性基 xor 一下 就是答案 一开始没有思路 看了这篇题解 豁然开朗 http://www.cnblogs.com/joyouth/p/5333181.html (还是本省的前辈呢)//By SiriusRen#include <set>#include <vector>#include <cstdi

2017-02-15 00:08:49 695

原创 BZOJ 3796 后缀数组+KMP

思路: 写得我头脑发蒙,,, 旁边还有俩唱歌的 抓狂 (感谢lh大爷查错) 首先 1、w是s1的子串 2、w是s2的子串 这两步很好办啊~ 后缀数组一下O(n)就可以搞 重点是 这个:3、s3不是w的子串 怎么办呢 把 1、3做一发KMP 那么取一下min就好了 注意重叠的情况 (其实是可以O(n)搞的 我一开始写错了 改的时候偷懒就直接二分了) 也很快~//By

2017-02-13 11:51:15 748

原创 BZOJ 3230 后缀数组+ST

思路: 首先我们已经会了后缀数组求本质不同的子串个数 这道题跟那个差不多 首先我们可以知道按字典序排好的每个后缀之前包含多少本质不同的字串 就是sigma(n-sa[i]+1-ht[i]+bi[i-1]) 在这上面二分就可以求出来原串是什么了 就把两个后缀的LCP和原串的长度取个min即可 再把串倒过来也差不多这么搞一遍就好啦//By SiriusRen#include <cstdi

2017-02-12 21:16:55 547

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除