
线段树
wanherun
今天会有好事发生吗
展开
-
codeforces438 D The Child and Sequence
题目一句话题意:支持区间取模,单点修改,区间求和的数据结构。后两个操作都是可以线段树操作的,但是第一个貌似就特别麻烦了。貌似不可做的样子呀,但是,我们可以发现一个性质如果x>yx>y那么xmody≤x2x\mod y\leq \frac{x}{2}的,这样的话,我们可以维护一下区间最大值,如果小于模数,就直接return,不然暴力做就好了。复杂度可以用势能分析得出是对的,我也不太会,就不多说了//区原创 2018-01-19 11:09:00 · 215 阅读 · 0 评论 -
bzoj3192 [JLOI2013]删除物品
题目咋眼一看,这道题就是一道模拟题,不过,应该要加高级数据结构(笑)。首先,我们可以把两堆堆顶合成一个堆顶就方便处理了,我们来感性认识一下,就把第一堆翻转一下,第二堆接在后面。我们维护一个堆顶,每次答案加上 最大的数到堆顶中数的个数 。而且如果这样的话,移动物品也就不用处理了,一举两得,多好。#include<bits/stdc++.h>#define N 100005using namespa原创 2017-08-30 07:42:11 · 267 阅读 · 0 评论 -
bzoj4994 [Usaco2017 Feb]Why Did the Cow Cross the Road III
题目usaco的题,(吐槽一下,现在uscao不能注册账号,如何科学上网233)。一个常见的思想,线段树处理。第一次出现时标记为1,第二次求和,再取消标记。对着样例画一画即可。#include<bits/stdc++.h>#define N 100000using namespace std;int n,cnt;int pos[N+1],x;int tmp[N+1];//struct T原创 2017-08-30 07:43:38 · 520 阅读 · 0 评论 -
bzoj1012 [JSOI2008]最大数maxnumber
题目咋一看,貌似是需要支持插入什么的数据结构。 但是,仔细读题后,发现,由于只在末尾插入,就是单纯的单点修改而已。#include<iostream>#include<algorithm>#include<cstdio>#include<cstdlib>#include<string>#include<cstring>#include<cmath>#define MAXN 20000原创 2017-09-02 20:51:18 · 336 阅读 · 0 评论 -
bzoj2743 [HEOI2012]采花
题目同样的,经典的离线处理,线段树。 把前一个标记为1,前一个的前一个标记为0。#include<iostream>#include<algorithm>#include<cstdio>#include<cstdlib>#include<cmath>#include<string>#include<cstring>#define MAXN 1000000using namespac原创 2017-09-02 20:53:34 · 376 阅读 · 0 评论 -
bzoj1878 [SDOI2009]HH的项链
题目只有询问,离线处理的典范,把询问按照右端点第一关键词,左端点第二关键词升序排序。 从左往右扫,把当前标记为1,之前的相同颜色取消标记,打右端点后询问。#include<bits/stdc++.h>#define N 50000using namespace std;struct ques{ int l; int r; int id;};ques B[4*N+1]原创 2017-09-11 21:50:57 · 164 阅读 · 0 评论 -
bzoj3212 Pku3468 A Simple Problem with Integers
题目真是一道无法描述的题233。简单线段树。手速++++++++++++++++++++++++没有代码。原创 2017-09-12 10:36:25 · 193 阅读 · 0 评论 -
bzoj4373 算术天才⑨与等差数列
题目等差数列233。我们来以人品来做这道题,好吧。先用线段树处理,区间和,区间平方和,区间最小值之类的,这样根据询问的r、k就可以算出这些东西,再判断是否相等就好了。是不是很有道理。然而。。。。。。并不知道如何re了233.贴个标称吧,貌似用的gcd之类的。#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#i原创 2017-09-12 10:37:07 · 290 阅读 · 0 评论 -
bzoj5029 贴小广告
题目乱贴小广告是很不好的呀,大家不要学习。。。一开始还以为这道题可以进行一系列骚操作来解决,之后,想了好久,发现我想不出来233。不过,反正就是简单的区间操作,直接上线段树就好了。。。#include<bits/stdc++.h>#define N 100000 using namespace std;struct Tree{ long long l; long long r;原创 2017-09-13 18:37:23 · 250 阅读 · 0 评论 -
bzoj3211 花神游历各国
题目区间开根,区间求和,一眼发现不可做。。。其实0和1,无论开几次都一样,而且一个正数开几次就成一了。 说以所谓的区间修改,毫无意义,直接全部单点改,判断能否继续改变打标记就好了。#include<bits/stdc++.h>#define N 100000#define LL long longusing namespace std;struct Tree{ int l;原创 2017-09-13 18:37:55 · 272 阅读 · 0 评论 -
bzoj3038 上帝造题的七分钟2
题目怕是道水题。线段树直接上,注意l可能大于r。如果区间最大值为1,就不操作了。其余暴力改就好了。#include<bits/stdc++.h>#define N 100000using namespace std;int n,m,l,r,opt; long long A[N+1],sum[N*4+1],mx[N*4+1];int ls[N*4+1],rs[N*4+1];inline c原创 2017-09-24 21:09:55 · 368 阅读 · 0 评论 -
hdu1542 Atlantis
题目矩形面积并基础题。考虑把每一个矩形按照边界分成小矩形,用扫描线就好了,然后就是统计另一个方向上的长度,这个用线段树维护一下就好了。比如这张图,大概就是这样分割的,对于x轴的一段,对应了y轴上的一部分。这样,就可以x轴扫面线,然后y轴线段树区间修改就好了。这个线段树也比较好写,不需要pushdown操作,因为每次我们只需要整个的长度。还有一点,这道题的坐标都是double类型的,就先离散化一下,至原创 2018-01-19 10:15:37 · 191 阅读 · 0 评论 -
bzoj4653 [Noi2016]区间
noi原题,不好评价。题目显然,我们选区间内的点不如就选区间端点,那就想到了离散化。由于要最大减最小,我们枚举最小的区间,依次加大区间,看加到何时该段成立,这就是线段树的操作了。注意枚举大区间时直接从上次开始就好了,稍微一想可得是单增。。。#include<bits/stdc++.h>#define N 600000using namespace std;struct Tree{ in原创 2017-08-28 21:10:39 · 254 阅读 · 0 评论