————数据结构
mengbi_er
一个蒟蒻JLoier
展开
-
bzoj4034: [HAOI2015]树上操作
链剖模板题,然而本辣鸡选手没写1LL调了好长时间。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;struct node{ int from; int to; int next;}edge[200005];struct segtr原创 2017-07-12 19:06:07 · 182 阅读 · 0 评论 -
bzoj2743: [HEOI2012]采花
考虑将询问离线。考虑每种颜色的花对答案的贡献,我们发现,对于一个位置上的花,若左端点在从1到上一个与该位置颜色相同的花的位置上,则该颜色对答案有贡献。所以将所有询问按1右端点从小到大排序,定义pre[i]为与该位置距离最近的与它颜色相同的花。对于一个位置,将pre[pre[i]]+1–pre[i]这段区间+1,然后每次询问的答案就是L上的值了,可以用线段树区间加,单点查询来做。#include<io原创 2017-09-12 15:39:15 · 250 阅读 · 0 评论 -
bzoj4390: [Usaco2015 dec]Max Flow
虽然知道差分能做,还是练了一波链剖模板。(其实是noip要到了QAQ)#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int read(){ char ch=getchar();int f=0; while(ch<'0'||ch>'9') c原创 2017-10-17 22:20:25 · 278 阅读 · 1 评论 -
bzoj1691: [Usaco2007 Dec]挑剔的美食家
按价格讲草和牛排序,维护一个以美味度为关键字的平衡树,不断枚举牧草,插入比牧草价值低的牛,之后用平衡树选择前驱并删除。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int read(){ char ch=getchar();int f=0;原创 2017-10-08 22:30:40 · 242 阅读 · 0 评论 -
bzoj2819: Nim
链剖维护路径异或值。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int read(){ char ch=getchar();int f=0; while(ch<'0'||ch>'9')ch=getchar(); while(ch>原创 2017-09-09 21:23:57 · 251 阅读 · 0 评论 -
bzoj3531: [Sdoi2014]旅行
用类似主席树的方法动态开点链剖+线段树,分宗教维护线段树。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int read(){ char ch=getchar();int f=0; while(ch<'0'||ch>'9')ch=getch原创 2017-09-20 22:05:04 · 207 阅读 · 0 评论 -
bzoj3685: 普通van Emde Boas树
明明就是线段树模板题,就是插入时如果不存在就不插入…#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int read(){ char ch=getchar();int f=0; while(ch<'0'||ch>'9') ch=getchar原创 2017-10-21 13:05:03 · 312 阅读 · 0 评论 -
bzoj1507: [NOI2003]Editor
平衡树裸题。光标位置直接修改就行,然后就区间插入删除,直接splay就行了。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int read(){ char ch=getchar();int f=0,x=1; while(ch<'0'||ch原创 2017-11-28 23:11:00 · 185 阅读 · 0 评论 -
bzoj3339: Rmq Problem
莫队。更新答案时加点暴力更新,删点后如果这个数出现次数为0且小于当前答案就更新。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;int read(){ char ch=getchar();int f=0,x=1;原创 2017-11-29 08:54:45 · 224 阅读 · 0 评论 -
bzoj4552: [Tjoi2016&Heoi2016]排序
二分答案,把大于二分值的变成1,否则变成0,线段树修改,最后查询问位置是1还是0。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int read(){ char ch=getchar();int f=0,x=1; while(ch<'0'|原创 2017-11-29 22:36:45 · 310 阅读 · 0 评论 -
bzoj2648&&2716 kd-tree模板
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int read(){ char ch=getchar();int f=0,x=1; while(ch<'0'||ch>'9'){if(ch=='-') x=-1;ch=getchar();}原创 2017-11-22 10:47:16 · 379 阅读 · 0 评论 -
bzoj2209: [Jsoi2011]括号序列
还是个splay模板,写了一个晚上…太菜了#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int read(){ char ch=getchar();int f=0,x=1; while(ch<'0'||ch>'9'){if(ch=='-')原创 2017-12-12 22:54:10 · 213 阅读 · 0 评论 -
bzoj1208: [HNOI2004]宠物收养所
应某人要求把这题放出来QAQ。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int n,m,tree[80005][2],root,t1,t2,size,ans,fa[80005],s[80005],x1,x2;int mod=1000000;int r原创 2017-09-11 20:36:44 · 72 阅读 · 0 评论 -
bzoj3781: 小B的询问
莫队,队询问排序,以左端点块为第一关键字,右端点为第二关键字,离线处理。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#define ll long longusing namespace std;int read(){ char ch=getchar(原创 2017-09-11 09:31:01 · 291 阅读 · 0 评论 -
bzoj3626: [LNOI2014]LCA
将询问离线,从1到n分别到根进行区间修改,答案为query(r+1)-query(l).#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<vector>using namespace std;vector<int> q[50005];inline int read(){原创 2017-07-12 19:15:09 · 194 阅读 · 0 评论 -
bzoj1345: [Baltic2007]序列问题Sequence
单调栈。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int n,top,s[1000005],x;long long ans=0;int main(){ scanf("%d",&n); s[0]=2000000000; for原创 2017-07-03 22:12:13 · 186 阅读 · 0 评论 -
bzoj1636: [Usaco2007 Jan]Balanced Lineup
线段树维护区间最大最小值。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int mi(int x,int y){ return x<y?x:y;}int ma(int x,int y){ return x>y?x:y;}int n原创 2017-07-05 19:19:57 · 235 阅读 · 0 评论 -
Codeforces Round #425 (Div. 2)D. Misha, Grisha and Underground
题目大意给出一棵树,每次询问三个点,选一个点为终点,问重叠路径长度最大值。题解我强行链剖加线段树,(两个log有7*线段树巨大常数)1980ms跑过,什么?你过不了,我不知道,因为我再交也过不了,可能是noi考挂后rp++的原因。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<vec原创 2017-07-25 01:32:46 · 371 阅读 · 0 评论 -
bzoj3211: 花神游历各国&&3038: 上帝造题的七分钟2
注意到一个点修改几次后就会变成1,于是可以暴力修改,维护区间和,区间最值即可#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;long long read(){ char ch=getchar();long long f原创 2017-08-17 10:47:45 · 306 阅读 · 0 评论 -
bzoj 1878: [SDOI2009]HH的项链
好像只有我sb写了巨长巨慢的线段树。。。 将询问离线,记录每个颜色首先出现的位置和下一个出现的位置,维护颜色数前缀和,将询问按左端点排序。从1到n枚举,如果左端点是当前位置则查询sum[r]-sum[l-1] (sum[l-1]似乎等于0…),最后对i到nex[i] 减一(就是忽略当前位置)。#include<iostream>#include<cstdio>#include<cstring>原创 2017-08-14 09:46:23 · 173 阅读 · 0 评论 -
bzoj2989: 数列&&4170: 极光
二维线段树搞搞。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int read(){ char ch=getchar();int f=0; while(ch<'0'||ch>'9')ch=getchar(); while(ch>='原创 2017-08-25 10:12:41 · 275 阅读 · 0 评论 -
bzoj2809: [Apio2012]dispatching
练习一下启发式合并,就照着别人写了一遍。(好菜QAQ) 从后往前枚举管理者,贪心选择最便宜的忍者,用splay+启发式合并维护。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int read(){ char ch=getchar();int f=原创 2017-09-03 21:33:50 · 199 阅读 · 0 评论 -
bzoj2006: [NOI2010]超级钢琴
维护前缀和,用线段树维护距离一个点[L,R]的最大值,并记录左右区间限制,将它加入优先队列,当取出一个点时,加入[L,where-1]和[where+1,R]两个值,记录左右限制。具体细节看代码。(写的不可读QAQ)#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>usi原创 2017-09-04 14:46:16 · 282 阅读 · 0 评论 -
bzoj3524: [Poi2014]Couriers&&2223: [Coci 2009]PATULJCI
主席树模板题。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int read(){ char ch=getchar();int f=0; while(ch<'0'||ch>'9') ch=getchar(); while(ch>='原创 2017-08-28 21:46:58 · 330 阅读 · 2 评论 -
Codeforces Round #433 (Div. 2) E. Boredom
题目大意问多少个两个点确定的矩形与给定区间有交。题解其实答案就是所有形成的矩形减没有交的矩形,那么由容斥原理,就是给定区间的4边的矩形减4个角,这个可以用主席树之类的维护。#include<map>#include<cmath>#include<queue>#include<cstdio>#include<cstring>#include<iostream>#include<algori原创 2017-09-08 08:50:51 · 281 阅读 · 0 评论 -
Educational Codeforces Round 33 F. Subtree Minimum Query
题目大意一棵有根树,询问距离点x<=y且在x子树内的点的最小值。题解mmp,论线段树开两倍的危害… 一眼树套树裸题,就是子树内dep<=dep[x]+y的点的最小值。 搞遍dfs序,线段树套线段树就行了。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;原创 2017-11-24 16:28:21 · 649 阅读 · 1 评论