【总结】线段树完整版(未完,不断更新)

很多线段树的题目看上去都是很裸的,而且线段树的算法也就那么几个。但是想做出一道题,还是没有那么简单的。因为,难题都是由简单题组成的。下面是根据NotOnlySuccess大牛整理的题目,以及结合了自己及别人的一些线段树题,其中涵盖了流行OJ的大部分题目。

一、单点跟新|求解区间值

1.hdu1166 敌兵布阵:是一道基础的单点更新,区间求和问题。

2.hdu1754 I Hate It:是一道基础单点更新,区间求最大值问题。

参考资料:(线段树总结)http://blog.csdn.net/shiqi_614/article/details/8228102

(完整版线段树)http://www.notonlysuccess.com/index.php/segment-tree-complete/





【总结】线段树完整版(未完,不断更新)

时间: 2024-10-29 04:27:00

【总结】线段树完整版(未完,不断更新)的相关文章

P3373 【模板】线段树 2 (未完待续)

P3373 [模板]线段树 2 题解 样例 输入: 8 10 571373 5929 7152 8443 6028 8580 5449 8473 4237 2 4 8 4376 1 2 8 9637 2 2 6 7918 2 5 8 5681 3 2 8 1 1 5 6482 3 1 5 1 5 8 8701 2 5 8 7992 2 5 8 7806 输出 478836 562114 代码爆0  inginging #include<bits/stdc++.h> using namespac

Mayor&#39;s posters(线段树之点的成段更新加离散化)

bin神的萌萌哒专题 这道题目也是简单区间更新的线段树题目,不过题目的数据范围很大,直接搞,时间空间的花费都会异常的高,所以就要用到离散化来优化时间空间复杂度. 何为离散化?........................ 简单地说就是对于给出的庞大数据进行一种数据上的缩小. 比如给你一段(1,10000)的区间,由于我们要的不是其区间长度,我们只需要知道这段区间的状态 如何,于是我们可以忽视其长度,把其表示成(1,2)这个区间长度极小的区间,这相当于物理上的质点. 当我们处理的问题上与其区间长

POJ 2528 Mayor&#39;s posters(线段树区间染色+离散化或倒序更新)

Mayor's posters Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 59239   Accepted: 17157 Description The citizens of Bytetown, AB, could not stand that the candidates in the mayoral election campaign have been placing their electoral post

Just a Hook(线段树之点的成段更新)

萌萌哒的传送门 /* * hdu 1698 * 线段树的点的成段更新 * 这道题不用预先建树,只需把1号节点延迟标记下就行 */ #include <iostream> #include <cstring> #include <cstdio> #include <cmath> #include <set> #include <queue> #include <vector> #include <cstdlib>

《记得当年东风旧》小说最新章节免费阅读(完整版未删节)

<记得当年东风旧>全文已有,关注微信公众号:二哈文学,回复:记得当年东风旧 或者书号:758 即可阅读全部章节 <记得当年东风旧>小说介绍 <记得当年东风旧>是最新出来的一本优质的都市言情小说,为各位书友们提供这本精彩小说的作者是的长木雨风说,书中主要讲述白芷林靖焱之前惊心动魄的爱情故事,有人说,年轻时不要遇见太惊艳的人,不然容易被不可得的东西羁绊一生.林靖焱,就是白芷穷尽此生不得的倾城色.你既为了你的白月光将我推下地狱,那便一起在相看两生恨中燃成灰烬吧--...绝对是

线段树(多维+双成段更新) UVA 11992 Fast Matrix Operations

题目传送门 题意:训练指南P207 分析:因为矩阵不超过20行,所以可以建20条线段的线段树,支持两个区间更新以及区间查询. #include <bits/stdc++.h> using namespace std; #define lson l, mid, o << 1 #define rson mid + 1, r, o << 1 | 1 typedef long long ll; const int INF = 0x3f3f3f3f; const int N =

poj 4047 Garden 线段树lazy标记与成段更新

题意: 给长度为n的序列及k(0<k<=n<=200000),m个操作p,x,y.其中(1)p==0:将x位置处的数变为y;(2)p==1:将x,y位置处的数互换.(3)p==2查询x-y位置之间连续k个数的和的最大值. 分析: 求连续区间的和最大,可以把区间看成一个点,这样这n-k+1个区间的最大和可以看做n-k+1个点的最大值,当更新原序列中位置x的值就相当于更新区间中x-k+1到x区间的值,然后用线段树做成段更新.成段更新要用到lazy标记,我的理解是:当更新或query的时候如果

HDU 5316 Magician (线段树区间最值,单点更新)

题目链接:Magician 题面: Magician Time Limit: 18000/9000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 1911    Accepted Submission(s): 549 Problem Description Fantasy magicians usually gain their ability through one of t

线段树 建树、查询、单点更新

1 #include<stdio.h> 2 int n, m; 3 int a[10]; 4 int tree[6<<2]; 5 6 int minx(int a, int b) 7 { 8 return a<b?a:b; 9 } 10 11 void build(int rt, int l, int r) 12 { 13 if(l==r) 14 { 15 tree[rt]=a[l]; 16 } 17 else 18 { 19 int m=(l+r)>>1; 20

B - I Hate It HDU - 1754 线段树区间最大值板子(单点更新,区间最大)

第一次打 改了半天  各种小错误 难受 1 #include<cstdio> 2 #include<iostream> 3 using namespace std; 4 const int maxn=2000000+7; 5 int a[maxn],n; 6 struct Node{ 7 int l,r; 8 long long Max,lazy; 9 void update(long long val){ 10 ;//本题没用 11 } 12 }tree[maxn*5]; 13