毕生所学。 1 const int N = 2e5 + 10; 2 #define lson rt << 1 // == rt * 2 左儿子 3 #define rson rt << 1 | 1 // == rt * 2 + 1 右儿子 4 #define int_mid int mid = tr ...
分类:
其他好文 时间:
2020-02-09 14:41:56
阅读次数:
166
"Crane" 因为这道题需要需要对数据进行多次修改以及多次查询,而且涉及区间修改,所以最高效的办法就是利用线段树对其进行优化。 ...
分类:
其他好文 时间:
2020-02-08 17:26:58
阅读次数:
76
介绍本题的两种做法: 方法1 前置芝士 1. "线段树" :一个很重要的数据结构. 2. "树状数组" :一个很重要的数据结构. 具体实现 区间修改,单点查询很容易就会想到树状数组了,至于查询前k个数的和又可以丢给权值线段树去干,所以第一种很显然的方法就是树状数组套一个线段树实现. 代码 方法2 前 ...
分类:
其他好文 时间:
2020-02-08 11:56:46
阅读次数:
65
原理很简单,利用差分知识做的,只能单点查询,在性能上优于线段树,但没有区间查询功能。 1 #include<bits/stdc++.h> 2 #define f(i,a,b) for(int i=a;i<=b;i++) 3 using namespace std; 4 5 const int N=5 ...
分类:
编程语言 时间:
2020-02-07 13:08:12
阅读次数:
82
线段树及其应用 [TOC] 线段树的几个基础操作:建树,单点查询,单点修改,区间查询,区间修改。其代码的主要思想为二分。参考博客: "https://blog.csdn.net/qq_39826163/article/details/81436440" 数据结构: 1.建树 建树的过程分为三步:1: ...
分类:
其他好文 时间:
2020-02-02 23:40:08
阅读次数:
91
# 题解 CF446C这是一道数据结构题。 我们先翻译下题目: 给你一个n,给你一个长度为n的序列,给你一个m,给你m此操作,包括区间修改和查询,修改为在一个区间内每个数加上他所对应的斐波那契数,查询为查询区间和。 一看到区间修改和区间查询,我们就可以知道这是一道线段树的题目(不要问我怎么知道的,~ ...
分类:
其他好文 时间:
2020-02-01 16:21:14
阅读次数:
80
第一篇博客哒 "题目链接" 首先看到区间加等差数列我们可以首先想到使用差分数组 就是记一个$b_i$=$a_{i+1}$ $a_i$ 然后每次修改$a_l$ 到$a_r$就只用将$b_{l 1}$,$b_r$单点修改,$b_l$至$b_{r 1}$区间修改就可以了 区间修改?我们首先想到了线段树 线 ...
分类:
Web程序 时间:
2020-02-01 14:23:36
阅读次数:
86
第一篇博客哒 题面 https://www.luogu.com.cn/problem/P4243 首先看到区间加等差数列我们可以首先想到使用差分数组 就是记一个bi=ai+1-ai 然后每次修改al 到ar就只用将bl-1,br单点修改,bl至br-1区间修改就可以了 区间修改?我们首先想到了线段树 ...
分类:
Web程序 时间:
2020-02-01 00:42:37
阅读次数:
85
预处理把左集划分为大小为1~i-1时,把全部元素都移动到右集的代价,记作sum[i]。 然后枚举终态时左集的大小,更新把元素i 留在/移动到 左集的代价。 树状数组/线段树处理区间修改/区间查询 1 #define HAVE_STRUCT_TIMESPEC 2 #include<bits/stdc+ ...
分类:
其他好文 时间:
2020-01-31 10:25:33
阅读次数:
71
差分数组这样的优化表示方法~~(在我们日常生活中)~~十分常见 如果我们假设有一列数a[1],a[2],a[3]... 那么若这样的差分数组表示为d[1],d[2],d[3]... 则有d[1]=a[1]; //一般我们也可以假设一个a[0]=0,就可以和下面的一样了 d[2]=a[2] a[1]; ...
分类:
编程语言 时间:
2020-01-30 17:40:37
阅读次数:
105