摘要:
"题目链接" cpp / 求异或和,容易想到,如果同一个数异或偶数次相当于0 ∑ai还不大,那想一下每个子集和出现多少次,显然只需要知道次数的奇偶,可以用bitset bit[i]=0/1表示子集和为i出现了偶数次/奇数次 有个简单的dp方程: f[x+a[i]]+=f[x] 对于一个x,bit(注 阅读全文
posted @ 2018-02-09 17:09
SovietPower
阅读(168)
评论(0)
推荐(0)
摘要:
"题目链接" "主要思路" cpp / 对于询问1,用堆代替multiset/Splay 对于询问2,multiset 1.注意哨兵元素 2.注意multiset中删除时是删除某元素的一个位置,而不是这个元素!这个值会全部都删掉 / include include include include c 阅读全文
posted @ 2018-02-09 17:08
SovietPower
阅读(185)
评论(0)
推荐(0)
摘要:
"题目链接" "主要思路" cpp / 其实只需要multiset即可 对于询问1,删除、插入差值,输出最小元素 对于询问2,插入后用前驱后继更新 1.注意哨兵元素 2.注意multiset中删除时是删除某元素的一个位置,而不是这个元素!这个值会全部都删掉 不开O2慢成狗 开了也不是很快 / inc 阅读全文
posted @ 2018-02-09 17:06
SovietPower
阅读(246)
评论(0)
推荐(0)
摘要:
"题目链接" cpp //输出ht见UOJ.35 include include include const int N=1e6+5; int n,tm[N],t1[N],t2[N],SA[N],rk[N],ht[N]; //SA[i]=j:排名为i的后缀开头的下标为j //rk[i]=j:以下标i 阅读全文
posted @ 2018-02-09 13:34
SovietPower
阅读(307)
评论(0)
推荐(0)
摘要:
"题目链接" cpp / 分块。对于块之外的,暴力修改、查询; 对于一整块内的,修改后sort使每一块块有序,询问时二分 =C的位置求个数 / include include include include using namespace std; const int N=1e6+5; int n, 阅读全文
posted @ 2018-02-09 13:33
SovietPower
阅读(172)
评论(0)
推荐(0)
摘要:
"题目链接" cpp / 数列的最大值保证 include include include using namespace std; const int N=5e4+5; int n,m,k,size,A[N],times[N]; long long ans[N],now; struct Ques 阅读全文
posted @ 2018-02-09 13:32
SovietPower
阅读(169)
评论(0)
推荐(0)
摘要:
"题目链接 COGS" "BZOJ2120" "洛谷P1903" cpp / Add和Subd函数中的vis不能直接设为=1或=0 比如 l=1,r=0 l=3,r=5 时,[1,5]的vis标记全都是1 所以要进行取反 / include include include include using 阅读全文
posted @ 2018-02-09 13:31
SovietPower
阅读(176)
评论(0)
推荐(0)
摘要:
题目链接: "COGS" 、 "BZOJ3236" Upd: 树状数组实现的是单点加 区间求和,采用值域分块可以$O(1)$修改$O(sqrt(n))$查询。同 "BZOJ3809" . 莫队为$O(n^{1.5})$次修改和$O(n)$次查询。 注意这两个需求并不平衡,所以在搭配数据结构时常使用分 阅读全文
posted @ 2018-02-09 13:30
SovietPower
阅读(236)
评论(0)
推荐(0)
摘要:
"题目链接" 阅读全文
posted @ 2018-02-09 13:29
SovietPower
阅读(179)
评论(0)
推荐(0)
摘要:
"题目链接" cpp include include include include using namespace std; const int N=1e5+5; define LL long long int n,belong[N],size; LL A[N],sum[N],tag[N]; in 阅读全文
posted @ 2018-02-09 13:28
SovietPower
阅读(270)
评论(0)
推荐(0)
摘要:
"题目链接" cpp include include include include using namespace std; const int N=1e5+5; int n,m,A[N],size,belong[N],sum[N]/ 某块的总和 /,tag[N]/ 某块的加标记 /; inlin 阅读全文
posted @ 2018-02-09 13:28
SovietPower
阅读(230)
评论(0)
推荐(0)
摘要:
"题目链接" cpp / 如果用线段树,每个节点要再开k的空间,显然不行。但是分块可以(虽然空间依旧爆炸) 分块。用bloans[i][j]表示 第i块 模k为j 的有多少个 对于不是整块的,查询时应判断 A[i]+tag[belong[i]] ==k || ==0 对于整块,维护两个tag,一个是 阅读全文
posted @ 2018-02-09 13:25
SovietPower
阅读(325)
评论(0)
推荐(0)
摘要:
"题目链接" cpp / 25832 kb 26964 ms 莫队+树状数组:增加/删除/查询 都是O(logn)的,总时间复杂度O(m sqrt(n) logn),卡不过 莫队+分块:这样查询虽然变成了sqrt(n),但是修改是O(1)的 考虑对权值进行分块 细节... / include inc 阅读全文
posted @ 2018-02-09 13:23
SovietPower
阅读(174)
评论(0)
推荐(1)
摘要:
题目链接 [Update] 这是一个暴力,DP正解见 https://www.luogu.com.cn/blog/fusu2333/solution-p2292 ,同样是利用fail递推,并利用串长只有10,可能匹配位置只有10的性质。 /* 简单的DP,查找是否有字典中的单词时在Trie树上做 要 阅读全文
posted @ 2018-02-09 13:21
SovietPower
阅读(196)
评论(0)
推荐(0)
摘要:
"题目链接" $Description$ 给出n个字符串,问重定义英文字符的顺序(即字典序),有哪些单词可能排在第一 $Solution$ 一个单词想要排在第一,首先是没有其它字符串是它的前缀。那么建一棵Trie树 其次,它字符的优先级要比和它有着相同前缀的要高。 也就是说,对于同一个父节点下,这个 阅读全文
posted @ 2018-02-09 13:20
SovietPower
阅读(256)
评论(0)
推荐(0)
摘要:
"题目链接" 还是80分,不是很懂。 cpp / 七个操作(用左偏树)(t2表示第二棵子树): 1.合并:直接合并(需要将一个t2中原有的根节点删掉) 2.单点加:把这个点从它的堆里删了,加了再插入回去(有负数)(它可能成为这一个堆的根,所以也要从t2中删除再插入) 3.整个连通块加:根节点打标记( 阅读全文
posted @ 2018-02-09 13:18
SovietPower
阅读(189)
评论(0)
推荐(0)
摘要:
"题目链接" "左偏堆学习 推荐" cpp include include include define gc() (SS==TT &&(TT=(SS=IN)+fread(IN,1,1val[B]||(val[A]==val[B]&&A B)) std::swap(A,B); son[A][1]=M 阅读全文
posted @ 2018-02-09 13:15
SovietPower
阅读(194)
评论(0)
推荐(0)
摘要:
"题目链接" cpp //注意树剖一条链上或一棵子树内的编号是连续的 //建树时用的是第二次dfs得到的序列 //不要频繁转longlong include include include // define gc() getchar() define gc() (SS==TT&&(TT=(SS=I 阅读全文
posted @ 2018-02-09 13:14
SovietPower
阅读(158)
评论(0)
推荐(0)
摘要:
"题目链接" 阅读全文
posted @ 2018-02-09 13:11
SovietPower
阅读(196)
评论(0)
推荐(0)
摘要:
"题目链接" st(n)表示sqrt(n) 为使块状链表不会退化,通常将每块的大小S维持在[st(n)/2,2st(n)]中,这样块数C也一定[st(n)/2,2st(n)]中 在此使用另一种方法(方便)维持这种性质:保证任意相邻两块的size相加 st(n),并且每块大小 include incl 阅读全文
posted @ 2018-02-09 13:10
SovietPower
阅读(504)
评论(0)
推荐(0)
摘要:
"题目链接" Update:这种分块写法...可以被卡掉啊... 好像没有靠谱的树分块写法... cpp / 对树上节点进行分块,每个点记录dep,fa,val,Max,Sum,Max,Sum表示当前点在该块内的子树中权值最大值与和 节点i各值表示从root[i]到i一段路径的的对应值。因为求值时应 阅读全文
posted @ 2018-02-09 13:08
SovietPower
阅读(205)
评论(0)
推荐(0)
摘要:
"题目链接" 洛谷上惨遭爆零是为什么。。 另外这个树分块算法是假的。 cpp / 插入删除只涉及一个数,故每次可以枚举一遍,而不是重构完后sort / include include include include define gc() getchar() const int N=6e4+5; c 阅读全文
posted @ 2018-02-09 13:07
SovietPower
阅读(180)
评论(0)
推荐(0)
摘要:
"题目链接" 第一次写(2017.11.7): 第二次写(2017.12.3): cpp include include const int N=1e5+5; int n,root,size,sz[N],cnt[N],t[N],son[N][2],fa[N]; inline int read() { 阅读全文
posted @ 2018-02-09 13:05
SovietPower
阅读(164)
评论(0)
推荐(0)
摘要:
"题目链接" 查找排名为k的数用平衡树 合并时用启发式合并,把size小的树上的所有节点插入到size大的树中,每个节点最多需要O(logn)时间 并查集维护连通关系即可 O(nlogn insert time) 据(主席)说按顺序插入能做到均摊O(1),中序遍历即可有序插入 1.并查集与平衡树是独 阅读全文
posted @ 2018-02-09 13:02
SovietPower
阅读(218)
评论(0)
推荐(0)
摘要:
"题目链接" cpp //模板吧 include include include using namespace std; const int N=40000,INF=1e8; int n,size,root,sz[N],cnt[N],t[N],son[N][2],fa[N]; inline int 阅读全文
posted @ 2018-02-09 13:01
SovietPower
阅读(120)
评论(0)
推荐(0)
摘要:
"题目链接" cpp / BZOJ1503: 3164kb 792ms/824ms(新建节点) 洛谷 : 3.06mb 320ms/308ms(前一个要慢wtf 其实都差不多,但前者好写) 四种操作: A:所有元素加v。直接TAG+=v即可 S:所有元素减v。TAG =v,如果TAG0,可是v已经要 阅读全文
posted @ 2018-02-09 12:59
SovietPower
阅读(197)
评论(0)
推荐(0)
摘要:
"题目链接" or "Here" 题意:n个数,有两个操作:1.修改某个数为v;2.询问一段区间第k小的数 如果没有修改,则可以用线段树,每个节点P[a,b]存储大小为b a+1的数组,代表其中的数 同时,这个数组还是要排好序的 直接找答案很不方便,于是考虑对数组二分答案,求比它小的数的个数 关于构 阅读全文
posted @ 2018-02-09 12:56
SovietPower
阅读(293)
评论(0)
推荐(0)
摘要:
"题目链接" 附纯SplayTLE代码及主要思路: cpp / 可以看做序列有n段,Insert是每次在每一段最后插入一个元素 只有插入,没有删除,所以插入一个元素对于询问1影响的只有该元素与前边一个元素(同段)、下一段的开头元素 故只需删掉该段最后元素与下一段开头元素的差,再加入新元素与下一段开头 阅读全文
posted @ 2018-02-09 12:51
SovietPower
阅读(212)
评论(0)
推荐(0)
摘要:
"题目链接" 阅读全文
posted @ 2018-02-09 12:49
SovietPower
阅读(208)
评论(0)
推荐(0)
摘要:
"题目链接" cpp / 任意组合土地好像很难DP 对于同一组,价值为max{ai} max{bi},显然长宽都小于这个的土地是不会算入结果的 由于是都买,所以所有会被包含的土地都不会算入结果 先按Ai、Bi升序排序,第一关键字Ai,那么对于B[i 1] include include define 阅读全文
posted @ 2018-02-09 12:47
SovietPower
阅读(150)
评论(0)
推荐(0)

浙公网安备 33010602011771号