线段树
Ray.C.L
不开longlong见祖宗
展开
-
最大数(线段树)
思路:每次插入的值和上次查询有关是动态的,所以用线段树写,那么我们一开始吧树建好操作1相当于在位置为x的地方插入数每次操作完将x++,操作2求个区间最大值。//#pragma GCC optimize(2)#include<bits/stdc++.h> using namespace std;typedef long long ll;#define SIS std::ios::sync_with_stdio(false)#define space putchar(' ')#de.原创 2020-11-17 11:39:47 · 407 阅读 · 0 评论 -
签到题(线段树)
题意:给你三个操作1.添加区间x-y,2.删除区间x-y,3查询总区间长度为多少,我们用线段树去维护区间的长度,用lazy标记标记区间的覆盖次数,如果此时区间已经覆盖了那么长度就是r-l+1,不然就是线段树的左右子树的长度和,如何是点的话就是0#include <cstdio>#include <cstring>#include <algorithm>#include <set>#include<iostream>#include&..原创 2020-07-19 12:53:02 · 174 阅读 · 0 评论 -
小杨的贝壳(线段树+差分)
思路:我们使用差分进行区间修改,c为a的差分数组,要修改区间a[l]——a[r]我们就在树上单点修改l和r+1,求区间相邻差值绝对值的最大值,也就是求|c[l+1]|——|c[r]|的最大值,求区间gcdgcd(a,b)=gcd(a,b−a)gcd(a,b,c)=gcd(a,b−a,c−b)gcd(a1,a2…,an)=gcd(a1,a2-a1,…,an-an-1)我们用差分数组求gcd(al,gcd(abs(al+1−al),abs(al+2−al+1)...,abs(ar−ar−1))gcd..原创 2020-07-16 12:11:58 · 168 阅读 · 0 评论 -
POJ 1151(线段树+扫描线)
题意:给你n个矩形的左下角和右上角的坐标问你他们的覆盖面积思路:扫描线沿着x轴走线段树维护y轴上的长度,沿着x轴走就对坐标x排序,线段树维护当前x位置上y的长度,我们用个lazy标记来判断是否全覆盖当lazy大于0说明全覆盖,不然就让他等于左右子树之和(且此时的2点不是出边上的点),build时因为l r是y轴上各个边点的序号只需要建到l+1==r就可以,每次update相当于加边或者删边#include <cstdio>#include <cstring>#include原创 2020-07-14 14:06:23 · 211 阅读 · 0 评论 -
牛牛的最美味和最不美味的零食(线段树)
思路:我们再线段树里面去维护一个区间有多少个数和他的最大值最小值,区间查询的时候我们去看有多少个数,如果他的数大于R,那么我们去他的左子树,如果他的数小于L我们去他的右子树,都不是的话我们去看他左子树此时要查询的数变成L——左子树数的个数,和右子树此时要查的数是,1——R-左子树维护区间数的个数,记住我们查的是数的个数不是区间#include <cstdio>#include <cstring>#include <algorithm>#include <s.原创 2020-07-07 18:57:35 · 211 阅读 · 0 评论 -
区区区间(线段树)
思路:利用等差数列的通项公式去计算区间和,lazy表示该位置的首项值#include <cstdio>#include <cstring>#include <algorithm>#include <set>#include<iostream>#include<vector>//#include<bits/stdc++.h>using namespace std;typedef long long ll;.原创 2020-07-05 18:31:30 · 350 阅读 · 0 评论 -
求最大值(线段树+思维)
思路:最大值肯定存在相邻的数之间,用线段树维护区间最大值(用C++14会内存超限)#include <cstdio>#include <cstring>#include <algorithm>#include <set>#include<iostream>#include<vector>//#include<bits/stdc++.h>using namespace std;typedef long lo.原创 2020-07-03 20:12:33 · 597 阅读 · 0 评论 -
约会安排 HDU - 4553
思路:建立一颗基友树和女神树,都去维护从区间左端点开始最长连续区间,从区间右端点开始的最长连续区间,区间最长连续子区间的长度。#include <cstdio>#include <cstring>#include <algorithm>#include <set>#include<iostream>#include<vector>//#include<bits/stdc++.h>using namespa..原创 2020-07-03 06:09:44 · 210 阅读 · 0 评论 -
Vases and Flowers HDU - 4614(线段树+二分)
思路:用线段树去更新和修改花瓶内的花,sum=1表示没花,0表示有花,lazy标记同意义,当执行1操作时,首先对给出的区间头x,查询x-n之间有多少空瓶子,如果空瓶子的个数不为0那么说明我们可以插花,此时我们用二分去判断符合条件的区间下标,对于左区间我们只需要找到可以插1个花的位置,对于右区间我们去找插完所有花的位置。#include <cstdio>#include <cstring>#include <algorithm>#include <set&..原创 2020-07-01 14:20:31 · 159 阅读 · 0 评论 -
洛谷 P3369(权值线段树)
思路:权值线段树模板#include <cstdio>#include <cstring>#include <algorithm>#include <set>#include<iostream>#include<vector>#include<bits/stdc++.h>using namespace std;typedef long long ll;#define SIS std::ios::sync.原创 2020-06-28 16:23:22 · 582 阅读 · 0 评论 -
洛谷 P3373 (线段树+双标记)
题目链接思路:先加后乘的操作是 a * c+b * c 先乘后加的操作是a * c+b * 1我们发现后者变成 * c就是前者,那么我就定下优先级先乘后加,在区间乘的时候对加标记进行 * c操作push_down的时候也是先乘后加#include <cstdio>#include <cstring>#include <algorithm>#include <set>#include<iostream>//#include<b.原创 2020-06-27 16:52:00 · 252 阅读 · 0 评论 -
Mayors posters POJ - 2528 (线段树+离散化)
思路:对坐标进行离散化,然后建立线段树进行染色,每次对他的区间染一个颜色,然后遍历整面墙看看有多少个不同颜色#include <cstdio>#include <cstring>#include <algorithm>#include <set>#include<iostream>//#include<bits/stdc++.h>using namespace std;typedef long long ll;#..原创 2020-06-26 18:02:33 · 303 阅读 · 0 评论 -
Bash and a Tough Math Puzzle CodeForces - 914D(线段树+思维)
题目链接思路描述出处:题意:给出一段序列,两个操作操作1 :给出l,r,x 求区间l-r的gcd,如果至多能改掉区间内的一个数(不影响原序列),使gcd是x的倍数,那么输出YES,否则输出NO操作2 :给出pos,x 将序列中pos位置上的数字改为x思路:首先GCD是具有传递性的,所以可以使用线段树进行维护,但比较麻烦的就是可以改掉一个数。可以试想一下,对于每个区间的查询,我们最终得到的是若干完整返回块的gcd,如果其中有两个块gcd都不是x的倍数,那么肯定不对。如果只有一个块不是呢?这个块原创 2020-05-22 18:51:50 · 155 阅读 · 0 评论 -
卿学姐与公主(分块)
思路:分块的模板#include <cstdio>#include <cstring>#include <algorithm>#include <set>#include<bits/stdc++.h>using namespace std;typedef long long ll;#define space putchar(' ')#define enter putchar('\n')typedef pair<int,i.原创 2020-05-20 11:53:43 · 190 阅读 · 0 评论 -
秋实大哥与花(线段树)
思路:线段树区间更新查询#include <cstdio>#include <cstring>#include <algorithm>#include <set>#include<bits/stdc++.h>using namespace std;typedef long long ll;#define space putchar(' ')#define enter putchar('\n')typedef pair<i.原创 2020-05-13 23:49:54 · 135 阅读 · 0 评论 -
POJ2823 滑动窗口(单调栈,线段树)
Poj 2823给定一个数列,从左至右输出每个长度为m的数列段内的最小数和最大数。数列长度:N<=106,m<=N8 31 3 -1 -3 5 3 6 7-1 -3 -3 -3 3 33 3 5 5 6 7思路:线段树#include <iostream>#include <algorithm>#include <cmath...原创 2020-03-23 10:54:23 · 190 阅读 · 0 评论 -
子段乘积(线段树区间最大值经典问题)
题意:查询长度为K的区间最大乘积。思路:线段树找区间最大值。#include <iostream>#include <algorithm>#include <cmath>#include <ctype.h>#include <cstring>#include <cstdio>#include <se...原创 2020-02-12 10:59:54 · 685 阅读 · 0 评论 -
Assign the task HDU - 3974(线段树dfs序区间修改,单点查询)
题意 一个公司有一个老板及许多员工 ,除老板外,每个员工都有自己的领导,然而每次分配工作之后,如果自己的领导得到了工作则自己也会去干相同的工作。每次询问要问一个一人在干什么工作。思路:找到BOSS然后dfs找到每个人所影响的区间,更新#include <algorithm>#include <iostream>#include <cstring>#...原创 2019-09-28 20:58:57 · 163 阅读 · 0 评论 -
Tunnel Warfare HDU - 1540
题意:区间1-N M次询问D 表示摧毁该村子通向其他的道路,R表示恢复上次摧毁的道路,Q表示询问该村庄和几个连在一起。思路:利用线段数求区间最大和最小。 这里假设其为 1 2 3 4 5 6 7 则如果 其中有若干个村子被毁了,如果要求第4个村子 只需求出来 1->4区间中被毁村子的最大值(2), 和 4->7 区间中被毁村子的最小值(5), 根据两者求出村子的连续区间,即 ...原创 2019-09-23 22:03:13 · 182 阅读 · 0 评论 -
XKC's basketball team2019徐州站网络赛
XKC’s basketball teamXKC , the captain of the basketball team , is directing a train of nn team members. He makes all members stand in a row , and numbers them 1 \cdots n1⋯n from left to right.The a...原创 2019-09-10 17:08:17 · 249 阅读 · 0 评论 -
敌兵布阵-HDU1166(线段树,树状数组)
C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了。A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况。由于采取了某种先进的监测手段,所以每个工兵营地的人数C国都掌握的一清二楚,每个工兵营地的人数都有可能发生变动,可能增加或减少若干人手,但这些都逃不过C国的监视。中央情报局要研究敌人究竟演习什么战术,所以...原创 2019-08-07 19:34:37 · 217 阅读 · 0 评论 -
A Simple Problem with Integers POJ - 3468(线段树区间修改)
You have N integers, A1, A2, … , AN. You need to deal with two kinds of operations. One type of operation is to add some given number to each number in a given interval. The other is to ask for the su...原创 2019-08-08 09:36:20 · 160 阅读 · 0 评论