- 博客(12)
- 收藏
- 关注
原创 Scapegoat_Tree模板和splay模板
#define N (100000+10)const double alpha=0.75;struct Node{ Node *ch[2]; int key,size,cover;// size为有效节点的数量,cover为节点总数量 bool exist;// 是否存在(即是否被删除) void push_up() { size=c
2016-12-22 20:12:31 509
原创 【BZOJ1046】 [HAOI2007]上升序列
题意:给出数列,每次询问求出长度为s且序号的字典序最小的上升序列思路:最坑的就是这种题不给spj先来一发lis,每个位置记录以此数为结尾的上升序列最短长度然后输出时,在剩余的数足够的情况下选最前面的代码:#include #define N 10009using namespace std;int n,m,a[N],Stack[N],top,x,now[N];void
2016-12-15 15:09:33 248
原创 【BZOJ1014】[JSOI2008]火星人prefix
题意:给出一字符串,每次:1、询问从第x个和第y个字符开始的字符串的lcq2、修改某字符3、在某字符后插入一字符(可以在开头)思路:发现又插入操作之后应该就是平衡树了,所以想splay。。然后lcq改为判断型问题(二分长度)每个节点记录一下它和它子树构成字符串的hash值。每次二分时判断一发就好感觉代码量好大。。调了好久。。代码:#include #def
2016-12-15 14:53:28 246
原创 【BZOJ1407】 [Noi2002]Savage
题意:略思路:从小到大枚举天数,两个人在同一处只有可能如下情况:某个同余方程(懒得写)有解且两个解都在寿命范围之内,然后如果任意两个人出现这种情况,就是会重合代码:#include #define gc getchar()#define N 20using namespace std;int n,c[N],p[N],t[N];int Max=0;int read(){
2016-12-15 14:50:54 243
原创 【BZOJ2242】[SDOI2011]计算器
题意:(题意好像很明显)思路:第一种ksm,第二种欧几里得拓展,第三种bsgs(其实就是模板题,然而第一次写bsgs)代码:#include #define gc getchar()#define ll long longusing namespace std;map mp;ll read(){ ll x=1; char ch; while (ch=gc,ch'9') i
2016-12-15 14:44:33 268
原创 Codeforces 487E Tourists
题意:给出一幅图和每个点的权值,每次修改某个点权值或询问两点间所有简单路径上的点权值最小值思路:只能看出来tarjan缩点和树剖,然后完全未考虑清楚细节。。似乎建图方法很高级首先tarjan缩点,对于每个块,新建一个点x,x向所有块内不是深度最小的点连边(借鉴(抄袭)某神犇的方法),然后深度最小的点向x连边,然后x的权值为所有块内不是深度最小的点的权值的最小值,然后询问时如果lca是新
2016-12-15 14:32:58 346
原创 Codeforces 486E LIS of Sequence
题意:给出一个数列,判断每个数:1:不在任何lis中2:在lis中,但不在所有的lis中(就是lis不一定要经过他)3:在所有lis中思路:对于1,前后各跑一遍,然后记录一下以它开始(到它结束)的lis长度,若开始和结束的两个长度和对于3,记录所有不是1情况的数以它开始的lis长度,若一个长度出现>=1次,那么所有为这种长度的数均不是必经过的数(就是为2),否则为1(似乎也
2016-12-15 14:31:48 268
原创 ZOJ 3820 Building Fire Stations
题意:在一棵树上找两个点,使其他每个点到这两个点的较大值中的最大值最小思路:树的直径先来一发,然后找中点分树然后两棵树各找直径,两个点就是两个直径的中点(并不知道直接四等分点会怎么样,但显然不对,吧)感觉细节还蛮多,不过代码很短。。(据说两个点不能是同一个点,反正我的似乎会自动屏蔽)代码:#include #define N 200009#define gc getchar()
2016-12-15 14:21:57 309
原创 UVALive 4839 HDU 3686 Traffic Real Time Query System
题意:给出一幅图,询问从一条边到另一条有几个点必被经过没看题解思路完全不对。。似乎知道了tarjan的新姿势思路:首先按边跑tarjan。然后记录一下每条边在哪一个块中,记录一下割点;然后建图:对于每个割点所在的块中(每个割点肯定在多个块中),建一个新点跟它们连边;然后就是一棵树啦,当然到树剖啦。然后询问就是统计一条链上的割点有多少啦(缩点基本是抄袭)代码:#inclu
2016-12-15 14:03:14 308
原创 UVA - 11604 General Sultan
题意:判断是否存在一个01串能由n串已知串用两种不同方式组成。思路:构图,对每个串匹配到每个字符都建立一个点。连边判断:1、原串未匹配完,匹配串匹配完,原串x->原串y;2、匹配串未完,原串完,原串x->匹配串y;3、两串皆完,随便怎么连然后宽搜乱搞。代码:#include #define gc getchar()#define N 109#define L 31usi
2016-12-15 13:55:37 258
原创 noip2016(tg)题解
D1T1:模拟不解释D1T2:最难一题(真心不科学),考场上写了个nlog2n算法,当时还天真地以为只有一个log(手动滑稽),然而内存没开够(虽然官方数据似乎还是95)。不过miaom大一眼帮我改到nlogn,说实话感觉比标解好理解多了。首先树链剖分一发。然后起点到终点的路径就被pou成了logn段,这时就想着把这一段的时间(显然是一个+1/-1等差数列)变成一个数,然后我想的是把他
2016-12-05 20:47:50 480
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人