线段树
一种高效的数据结构
为什么他们cf写的这么快
这个作者很懒,什么都没留下…
展开
-
牛客挑战赛39 C 牛牛的等差数列(线段树)(*)
题目链接#include<bits/stdc++.h>#define ll long longusing namespace std;const int maxn = 2e5 + 50;int val[maxn];ll a[maxn<<2], d[maxn<<2];ll sum[maxn<<2];const int mod = 3...原创 2020-04-19 21:28:49 · 209 阅读 · 0 评论 -
hdu4614 Vases and Flowers(线段树+二分)
题目链接Problem Description Alice is so popular that she can receive many flowers everyday. She has N vases numbered from 0 to N-1. When she receive some flowers, she will try to put them in the vases,...原创 2020-04-19 20:46:08 · 164 阅读 · 0 评论 -
Codeforces Round #275 (Div. 2) D. Interesting Array(线段树+位运算+构造)
题目链接题意:给出m对约束,问你能不能构造出一个数组满足这m个约束,每一个约束都是l,r,x代表a【l】&a【l+1】&a【l+2】。。。&a【r】=x;思路:一开始想着给每个区间直接赋值,区间相交的部分就用一个超大数(1111111.。。)来代替,但是这样解决不了一些包含区间的约束,后来想了一个超复杂的算法也是实现不了,果断还是看题解了。。。这个思路这是神奇,(a|...原创 2020-04-15 20:05:24 · 137 阅读 · 0 评论 -
Educational Codeforces Round 67 (Rated for Div. 2) D. Subarray Sorting(线段树+思维)(*)
题目链接题意:给定数组a和b,你可以在a数组里选择一个区间【l,r】,将【l,r】内的数进行sort(从小到大),问a数组最终能否通过若干次上述操作变成b数组。思路:很有意思的题,我们着重要思考的是什么时候会不存在答案,有一点我们可以观察到,如果a是3 7 2,b数组是7 3 2的话,我们发现a数组里的7最终肯定是不可能跑到3前面去的,往这个方面仔细思考一下,以b数组为基准,首先我们将a数组...原创 2020-04-12 21:11:47 · 117 阅读 · 0 评论 -
Educational Codeforces Round 24 E. Card Game Again(线段树+二分)
题目链接题意:给定n个数,问有多少区间【l,r】满足区间内数的乘积是k的倍数。思路:写了半天的二分居然超时了。。。还是用了线段树,为了防止爆ll可以乘积%k,然后对于每一个位置进行二分,如果【li,ri】是k的倍数的话,不用说【li,ri+1】,【li,ri+2】。。。肯定也是满足的,二分查找第一个满足条件的右端点就行。#include <bits/stdc++.h>#de...原创 2020-03-26 20:54:41 · 168 阅读 · 0 评论 -
Codeforces Round #535 (Div. 3) E2. Array and Segments (Hard version)(线段树+思维)
题目链接思路:这题曾经好像做过,但结果还是不会做。。。其实观察一下假设,一、最后结果的最大值和最小值都在【li,ri】里,那么最大值减去最小值是同时变化的,二、如果最大值不在【li,ri】里的话,最后的结果也只会增不会减,所有我们枚举每个位置,假设最小值在这个位置,用线段树把以i为左端点的区间进行update,查询一下最大值减一下就行,不过这里要注意以下,查询完以后记得要把以i为右端点的区...原创 2020-03-26 20:48:21 · 102 阅读 · 0 评论 -
Educational Codeforces Round 6 E. New Year Tree(dfs序+线段树+状态压缩)(妙题)
题目链接题意:给定一棵树,给你两个操作,一是把v和它的子树的所有数变成x,二是查询v和它的子树中不同的数有几个。思路:很妙的解法,由于值不超过60,所有之间可以用二进制或操作来判断不同的数的个数,比如2和3,我就变成100和1000,相或后就变成1100,只要查看最后的结果有几个1就是不同的数的个数,至于子树的话用线段树+dfs序就可以,线段树pushup的时候相或就可以了。#inclu...原创 2020-03-26 20:12:58 · 124 阅读 · 0 评论 -
Codeforces Global Round 7 E. Bombs(线段树+思维)
题目链接思路:思维量很大的题,不看题解完全做不来。。。首先要明白一件事答案肯定是递减的,所以想减少复杂度就可以通过逐渐枚举答案ans,剩下的就是判断ans能否作为答案。只有区间内的某一个位置大于等于ans的数减去后面的炸弹数量大于0那么ans就可行。#include<bits/stdc++.h>using namespace std;typedef long long ll...原创 2020-03-26 19:49:59 · 187 阅读 · 0 评论 -
Codeforces Round #625 (Div. 1) C. World of Darkraft: Battle for Azathoth(线段树+二维偏序)
题目链接思路:按照二维偏序的处理方法,一般都是固定一维,再来考虑另一维,我们这里也一样,先把怪物按ai排序,那么轮到第i个的时候就说明1-ai-1都是小于它的,我们只要再求一下之前的满足条件的bi就可以了。#include<bits/stdc++.h>#define ll long longusing namespace std;const int maxn=1e6+1;...原创 2020-03-24 17:03:31 · 179 阅读 · 0 评论 -
Codeforces Round #223 (Div. 1) C. Sereja and Brackets(线段树+思维)
题目链接题意:给定一个括号字符串,给定m个询问,每次询问一个区间【l,r】的最大括号匹配数量是多少。思路:很考验思维量的一个题目,在用线段树维护左右括号的做发遇到了bug果断放弃了,这个方法好是好,但难想啊。。。L【i】表示的是1-i还未匹配的左括号数量,R【i】表示1-i中右括号的数量,现在给你一个区间【l,r】,我们知道最大数量肯定是R【r】-R【l-1】(显示这是理想状态,几乎达不到...原创 2020-03-24 17:00:00 · 176 阅读 · 0 评论 -
hdu5634 Rikka with Phi(线段树+欧拉函数)
添加链接描述Problem DescriptionRikka and Yuta are interested in Phi function (which is known as Euler’s totient function).Yuta gives Rikka an array A[1…n] of positive integers, then Yuta makes m queries....原创 2020-03-21 21:48:47 · 190 阅读 · 0 评论 -
Codeforces Round #111 (Div. 2) E. Buses and People (线段树+偏序)(好题)
题目链接思路:这里其实就是要你处理一个三维的偏序,只要找到满足这个式子sj ≤ li, ri ≤ fj and bi ≤ tj的最小的j,那么我们可以先固定一维,先按开始时间排序,这样就保证了li>=sj,然后把时间进行离散化处理,以时间为下边件线段树,插入的值就是结束时间,然后当遍历到公交车时进行更新操作,遍历到人时进行查询操作。(查询的时候尽可能地往左子树查询)#include&...原创 2020-03-17 21:47:46 · 202 阅读 · 0 评论 -
Codecraft-18 and Codeforces Round #458 (Div. 1 + Div. 2) D. Bash and a Tough Math Puzzle (线段树)
题目链接思路:普通地区间gcd更新和查询?当然这么裸,它查询地时候加了个条件,就是如果修改区间内地某一个值能使得修改后地gcd为x,那么也是输出x,一开始并不知道怎么做,但仔细想想能更改地只有一个就说明如果是yes的话区间地所有数最多只有一个不是x的倍数,否则就no,于是就变成了查询区间内不是x的倍数的数是否只有一个。#include<bits/stdc++.h>using ...原创 2020-03-17 21:52:06 · 121 阅读 · 0 评论 -
Codeforces Round #442 (Div. 2) E. Danil and a Part-time Job (dfs序+线段树+位运算)
题目链接题意:给出一棵树,其节点为0或1,有两种操作1:将一棵子树上所有节点的值反转2:求一颗子树上1的个数思路:第一次学到了dfs序的操作,会了dfs序以后剩下的就是模板了,至于反转的话异或1就可以了。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=2e5...原创 2020-03-17 21:54:32 · 116 阅读 · 0 评论 -
Codeforces Round #200 (Div. 1) D. Water Tree(dfs序+线段树+思维)
题目链接题意:给定一棵树,初始树中所有数都是0,然后有三个操作,1、将v和它的子树变1;2、将v和它的所有祖先节点变0,3、输出v的值。思路:1和3都很容易解决,用dfs序+线段树就可以了,但2不好处理,看大佬好像都是用树剖,可惜弱鸡不会QAQ,还有一种很妙的方法,我们对于2可以单点更新,线段树来维护区间最小值,,在1操作前将v的父亲节点设为0就行(类似于差分思想),然后查询的时候如果v和...原创 2020-03-18 22:09:33 · 217 阅读 · 1 评论 -
Codeforces Round #567 (Div. 2) D. Irrigation(权值线段树+思维)
题目链接题意:有m个城市要举办奥运会,现在给出前n年举办过奥运会的城市编号,第n年后举办奥运会的城市要符合以下规则:1、优先选m个城市里举办奥运会次数最少的城市;2、如果这样的城市有多个,优先选编号较小的。现给出q个询问,每个询问表示第x年的举办奥运会的城市是哪个?思路:我们可以发现举办奥运会的城市是存在周期性规律的,按举办次数从小到达排序,到第i个城市举办的年份是可以一步步递推出来的,...原创 2020-03-01 13:19:22 · 133 阅读 · 0 评论 -
hdu 5726 GCD(线段树上gcd,好题)
题目链接Give you a sequence of N(N≤100,000) integers : a1,…,an(0<ai≤1000,000,000). There are Q(Q≤100,000) queries. For each query l,r you have to calculate gcd(al,al+1,…,ar) and count the number of pa...原创 2020-03-01 13:37:15 · 435 阅读 · 0 评论 -
Codeforces Round #510 (Div. 2) D. Petya and Array(权值线段树or树状数组)
题目链接题意:问区间和小于t的区间对数是多少?思路:sum【j】<sum【i】+t,则问题就转化成了求【i+1,n】中小于sum【i】+t的个数,可以离散化后用权值线段树,树状数组二分也可以,不过不清楚权值线段树做法的时候v要push (sum+t)再离散化,留坑。#include<bits/stdc++.h>using namespace std;typedef l...原创 2020-03-02 21:37:36 · 176 阅读 · 0 评论 -
牛客练习赛47 C DongDong跳一跳(线段树+思维)
题目链接思路:我们枚举每一个位置,看看他停在这个位置时得到的最大鱼竿量,取max就是答案,那么对于每一个位置i的最大鱼竿量怎么求呢?我们知道他一定是从高度为【a[i]-m,a[i]+m】这个区间跳过来的,也就是这个区间的位置的最大值,区间问题???对了,线段树维护该位置的最大鱼干量即可。#include<bits/stdc++.h>using namespace std;co...原创 2020-02-16 16:45:10 · 189 阅读 · 0 评论 -
Codeforces Round #603 (Div. 2) E. Editor(线段树+思维)
题目链接题意:最讨厌这种又臭又长的题。。。简单来说就是给出一个字符串,L表示光标左移,R表示有移,问你括号最大的嵌套数。思路:可以先想想最大嵌套数该怎么求,可以把左括号设为1,右括号为-1,很显然就是求最大额前缀和。当光标移动修改的时候影响的就是后缀,用线段树区间维护即可。#include<bits/stdc++.h>using namespace std;const i...原创 2020-02-10 21:58:30 · 653 阅读 · 0 评论 -
Codeforces Round #569 (Div. 2) E - Serge and Dining Room(线段树+思维)
题意:给出一个数组a,表示每个菜的价格,给出一个数组b表示每个学生手里拥有的钱,规定在每个学生会选择他能买得起的最贵的菜。现在给出q个询问,询问1将第x个菜的价格改为y,询问2将第x个学生手里的钱改为y,每次询问输出作者能买的最贵的菜的价格。思路:对于每一道菜,我们都会将区间【1,a[i[】加1,对于每一个学生我们都会将区间【1,b[i]】减1,这个的话查找一下那个点的值大于0就说明这个菜还...原创 2020-01-21 16:43:36 · 157 阅读 · 0 评论 -
Educational Codeforces Round 81 (Rated for Div. 2) E - Permutation Separation (线段树+思维)
题意与思路:主要参考了大佬的做法,大佬的做法,真的很奇妙,真不知道我何时能达到如此水平。。。#include<bits/stdc++.h>using namespace std;const int maxn=2e5+1;typedef long long ll;ll p[maxn],a[maxn];struct node{ int l,r; ll minn,lazy...原创 2020-01-31 20:39:19 · 250 阅读 · 0 评论 -
牛客练习赛56 D 小翔和泰拉瑞亚(线段树)
链接:https://ac.nowcoder.com/acm/contest/3566/D来源:牛客网题目描述小翔爱玩泰拉瑞亚 。一天,他碰到了一幅地图。这幅地图可以分为n列,第i列的高度为Hi,他认为这个地图不好看,决定对它进行改造。小翔又学会了m个魔法,实施第i个魔法可以使地图的第Li列到第Ri列每一列的高度减少Wi,每个魔法只能实施一次,魔法的区间可能相交或包含。小翔认为,一幅地...原创 2020-01-07 16:10:02 · 291 阅读 · 0 评论