线段树
mengbi_er
一个蒟蒻JLoier
展开
-
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 评论 -
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 评论 -
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 评论 -
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 评论 -
bzoj2743: [HEOI2012]采花
考虑将询问离线。考虑每种颜色的花对答案的贡献,我们发现,对于一个位置上的花,若左端点在从1到上一个与该位置颜色相同的花的位置上,则该颜色对答案有贡献。所以将所有询问按1右端点从小到大排序,定义pre[i]为与该位置距离最近的与它颜色相同的花。对于一个位置,将pre[pre[i]]+1–pre[i]这段区间+1,然后每次询问的答案就是L上的值了,可以用线段树区间加,单点查询来做。#include<io原创 2017-09-12 15:39:15 · 250 阅读 · 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 评论 -
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 评论 -
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 评论 -
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 评论 -
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 评论 -
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 评论