线段树和树状数组
搬砖的小孩有肉吃
我曾十步杀一人,却败给你的眼神
展开
-
UCF Local Programming Contest 2017—— Rotating Cards(树状数组+思维)
题目链接:https://nanti.jisuanke.com/t/44825此题需要每次去掉top位置的纸牌后实时更新前缀和,于是可以考虑树状数组,树状数组的时间复杂度是log级别。思路:设刚去掉的纸牌原来的位序是pre,现在的位序是now,剩余纸牌的数字和是n,比如从top到bottom依次为3 5 1 4 2 ;设pre=3,now=5,分别对应的是1和2号纸牌;接下来要...原创 2020-04-09 11:47:07 · 162 阅读 · 0 评论 -
ACM训练——hdu5239(线段树区间修改+巧妙剪枝)
题目链接:https://vjudge.net/contest/365414#problem/D此题用线段树去修改每次访问的区间,但是100000次暴力访问肯定超时,这里可以有个巧妙剪枝:如果一个数平方取模之后还是不变,那么这个数就可以直接返回;同样,如果一个区间是由这种数组成的,那么这个区间可以直接返回;看代码。。。。#include<stdio.h>...原创 2020-03-30 22:28:04 · 225 阅读 · 0 评论 -
蓝桥杯模拟赛——晚会节目单(线段树)
题目【问题描述】小明要组织一台晚会,总共准备了 n 个节目。然后晚会的时间有限,他只能最终选择其中的 m 个节目。这 n 个节目是按照小明设想的顺序给定的,顺序不能改变。小明发现,观众对于晚会的喜欢程度与前几个节目的好看程度有非常大的关系,他希望选出的第一个节目尽可能好看,在此前提下希望第二个节目尽可能好看,依次类推。小明给每个节目定义了一个好看值,请你帮助小明选择出 m 个节目,满足...原创 2020-03-27 17:07:23 · 2425 阅读 · 0 评论 -
2020牛客寒假算法基础集训营4--坐火车
解题思路:用树状数组实时维护第i节车厢的左右两边的符合条件的对数(反正这句话不好理解,我搞了好久还是晕晕晕)#include<stdio.h>#include<iostream>#include<algorithm>#include<string.h>#include<vector>#include<cma...原创 2020-02-15 17:48:09 · 280 阅读 · 0 评论 -
大象的年龄--线段树or单调队列加二分
参考博客:https://blog.csdn.net/a664607530/article/details/52909700线段树的做法:#include<stdio.h>#include<iostream>#include<algorithm>#include<string.h>#include<vecto...原创 2019-12-07 13:06:38 · 99 阅读 · 0 评论 -
求覆盖两次或以上的面积---线段树+扫描线+离散化
给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积.Input输入数据的第一行是一个正整数T(1<=T<=100),代表测试数据的数量.每个测试数据的第一行是一个正整数N(1<=N<=1000),代表矩形的数量,然后是N行数据,每一行包含四个浮点数,代表平面上的一个矩形的左上角坐标和右下角坐标,矩形的上下边和X轴平行,左右边和Y轴平行.坐标的...原创 2019-08-21 17:07:11 · 167 阅读 · 0 评论 -
区间合并在扫描线求周长中的应用---线段树+扫描线+离散化
http://acm.hdu.edu.cn/showproblem.php?pid=1828总结:此题与求覆盖后的面积类似,不同点就是在线段树节点中多了三个变量如下struct node{ ll l,r;//节点代表的区间 ll sum;//该区间被覆盖的长度 ll num;//该区间的线段的数目 ll mark;//Mark进行标记区间的覆盖情况 ll l...原创 2019-08-22 11:53:16 · 184 阅读 · 0 评论 -
区间合并与异或操作结合 以及求整个区间内最长连续段的长度
题意:有n个数,为0或1;有m个操作,每个操作三个数:flag,x,y;flag=1时,将区间[x,y]内的数字0变成1,1变成0;flag=0时,查询[x,y]内最长连续1的长度此题的特殊之处需要维护0的连续长度和1的连续长度,同时要用到异或操作---看代码#include<stdio.h>#include<iostream>#include<...原创 2019-08-23 15:15:55 · 316 阅读 · 0 评论 -
树状数组+二分or暴力出奇迹---lost cows
描述:N(2<=N<=8,000)奶牛有独特的品牌在范围1.N.在一个糟糕的判断力的壮观显示,他们去附近的‘水坑’,并喝了太多啤酒在晚餐前。当是时候排队为他们的晚餐,他们没有排队按照所需的上升数字的顺序,他们的品牌。令人遗憾的是,FJ没有办法解决这些问题。此外,他不太擅长观察问题。他没有写下每头牛的品牌,而是确定了一个相当愚蠢的统计数据:每一头排在奶牛前面的奶牛,他知道排在那头...原创 2019-08-28 00:03:41 · 106 阅读 · 1 评论 -
差分数组+树状数组
核心:差分数组中temp[i]=a[i]-a[i-1];a[i]=temp[1]+temp[2]+.....+temp[i];即可以用temp的前i项和表示(a[0]=0);这样就可以用树状数组前i项和的性质来实现题目描述如题,已知一个数列,你需要进行下面两种操作:1.将某区间每一个数数加上x2.求出某一个数的值输入格式第一行包含两个整数N、M,分别表示该数列数...原创 2019-09-07 10:26:41 · 218 阅读 · 0 评论 -
求覆盖后的面积---线段树+扫描线+离散化
http://acm.hdu.edu.cn/showproblem.php?pid=1542题意:二维平面有n个平行于坐标轴的矩形,现在要求出这些矩形的总面积. 重叠部分只能算一次.分析:线段树的典型扫描线用法. 首先假设有下图两个矩阵,我们如果用扫描线的方法如何计算它们的总面积呢?又因为上面2个矩形有4个不同的浮点数x坐标,所以我们需要把x坐标离散...原创 2019-08-21 00:09:00 · 206 阅读 · 0 评论 -
dfs序入门(模板)---- CodeForces 877E
http://codeforces.com/problemset/problem/877/E#include<stdio.h>#include<iostream>#include<algorithm>#include<string.h>#include<vector>#include<cmath>...原创 2019-08-25 11:33:13 · 169 阅读 · 0 评论 -
Memory Control-----区间合并(求某个连续段的起始位置)
http://acm.hdu.edu.cn/showproblem.php?pid=2871 Problem Description Memory units are numbered from 1 up to N. A sequence of memory units is called a memory block. The memory contr...原创 2019-08-20 18:34:00 · 145 阅读 · 0 评论 -
树状数组求逆序数对(两种)
一:题目链接In this problem, you have to analyze a particular sorting algorithm. The algorithm processes a sequence of n distinct integers by swapping two adjacent sequence elements until the sequence i...原创 2019-08-05 10:59:40 · 156 阅读 · 0 评论 -
离散化+线段树+涂颜色(D-市长海报)
题目链接AB拜特敦的公民无法忍受市长竞选活动中的候选人随心所欲地在所有地方张贴他们的选举海报。市议会最终决定为张贴海报修建一堵选举墙,并实行以下规则:每个候选人都可以在墙上贴上一张海报。 所有海报的高度等于墙的高度;海报的宽度可以是任意整数字节数(字节是Bytetown中的长度单位)。 墙被分成几个段,每个段的宽度是一个字节。 每一张海报必须完全覆盖一定数量的连续墙段。他们建造了...原创 2019-08-05 21:58:55 · 429 阅读 · 2 评论 -
(树状数组+离散化+离线处理)
一:求某段区间内不同的数字的和the source of thealgorithmAfter inventing Turing Tree, 3xian always felt boring when solving problems about intervals, because Turing Tree could easily have the solution. As well, w...原创 2019-08-06 09:07:05 · 321 阅读 · 0 评论 -
线段树---区间合并(求一块满足条件的最左边的空白空间)
原题连接:http://poj.org/problem?id=3667题意:参考样例,第一行输入n,m ,n代表有n个房间,编号为1---n,开始都为空房,m表示以下有m行操作,以下 每行先输入一个数 i ,表示一种操作:若i为1,表示查询房间,再输入一个数x,表示在1--n 房间中找到长度为n的连续空房,输出连续n个房间中左端的房间号,尽量让这个房间号最小,若找不到长度为n...原创 2019-08-18 17:33:03 · 194 阅读 · 1 评论 -
求某个元素所在连续段的长度(也可求左右端点) (区间合并)
链接------->题意:D代表破坏村庄,R代表修复最后被破坏的那个村庄,Q代表询问包括x在内的最大连续区间是多少题解:线段树的合并,这道题就是需要合并,D的话破坏了这个村庄,那怎么办呢,就相当于中间切开,那么就是相当于把当前这个点标记为0,然后再去更新它的父亲,这样怎么样会更加好做,好理解呢。一段区间可以成为两段区间拼凑而成。然后,我们定义老ls,rs表示左边连续区间,右边连...原创 2019-08-18 19:30:25 · 171 阅读 · 0 评论 -
线段树(单点修改+an easy problem)(在线)-----太聪明了
题目链接One day, a useless calculator was being built by Kuros. Let's assume that number X is showed on the screen of calculator. At first, X = 1. This calculator only supports two types of operation....原创 2019-08-07 19:24:18 · 113 阅读 · 0 评论 -
线段树(通过单点修改进行区间修改)
题目链接A lot of battleships of evil are arranged in a line before the battle. Our commander decides to use our secret weapon to eliminate the battleships. Each of the battleships can be marked a value ...原创 2019-08-07 19:53:09 · 170 阅读 · 0 评论 -
求区间最长连续上升子序列-----线段树+区间合并
#include<stdio.h>#include<iostream>#include<algorithm>#include<string.h>#include<vector>#include<cmath>#include<string>#include<map>#include&...原创 2019-08-24 11:02:21 · 767 阅读 · 0 评论 -
求最大子段和 ----线段树+区间合并
#include<stdio.h>#include<iostream>#include<algorithm>#include<string.h>#include<vector>#include<cmath>#include<string>#include<map>#include&...原创 2019-08-24 13:02:11 · 155 阅读 · 0 评论 -
线段树与树状数组
一:线段树问题(单点与区间)1:线段树问题 (单点修改,区间内单点询问)(题目链接) Problem Description 很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。 这让很多学生很反感。 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。 ...原创 2019-08-04 13:28:00 · 253 阅读 · 0 评论