毕生所学。 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
入门级数据结构算法。复习一下,分别手写一个。 线段树版本(过了CF上的https://codeforces.com/contest/1291/problem/D): 1 #include<bits/stdc++.h> 2 #define f(i,a,b) for(int i=a;i<=b;i++) ...
分类:
编程语言 时间:
2020-02-08 13:26:22
阅读次数:
145
介绍本题的两种做法: 方法1 前置芝士 1. "线段树" :一个很重要的数据结构. 2. "树状数组" :一个很重要的数据结构. 具体实现 区间修改,单点查询很容易就会想到树状数组了,至于查询前k个数的和又可以丢给权值线段树去干,所以第一种很显然的方法就是树状数组套一个线段树实现. 代码 方法2 前 ...
分类:
其他好文 时间:
2020-02-08 11:56:46
阅读次数:
65
Mayor's posters(线段树+离散化+lazy) 题目大意:在墙上贴海报,然后很多海报,一层又一层,问你最后可以看到多少张海报。 题目分析:数据范围很大,普通的线段树肯定超时+超内存,所以要用到离散化,离散化有基础的和稍微复杂一点的,然后这题要用到稍微复杂一点的,离散化简单的来说就是只取我 ...
分类:
其他好文 时间:
2020-02-08 10:03:59
阅读次数:
63
如题:本文主要说明对于区间有限制查询的一些解法(其实就两种) 问题1:给定一个数列,要求查询区间L—R中所有大于等于Va小于等于Vb的元素和 解法: 1.线段树套权值线段树 第一维维护区间,第二维作为权值线段树,维护值域在A—B之间的元素之和 每次查询就从第一维拉到对应区间,然后用Va和Vb确定在权 ...
分类:
其他好文 时间:
2020-02-08 09:15:39
阅读次数:
61
A. Ring 几乎是原题。 发现对于一个确定的左端点,必然存在一个分界点r,使得所有右端点>r的区间都存在环,其余都不存在。 考虑这个东西具有单调性,所以用双指针就可以实现这个过程。 那么剩下的问题就是动态维护图的连通性,使用LCT即可。 B. Exchange 发现主要的问题在于2操作。 观察这 ...
分类:
其他好文 时间:
2020-02-07 22:31:33
阅读次数:
76
感觉自己的解法又是歪的 代码写的很乱。。要先找出一开始有多少段,然后计算删掉每条线段的贡献,求个最大值就可以 删每条线段的贡献可以用线段树区间合并来做 ps:正解其实很简单。。扫描一下就可以了 /* 先把所有线段覆盖到线段树上 然后对每一个线段[L,R],查询区间[L,R]有多少值>1的段即可 */ ...
分类:
其他好文 时间:
2020-02-07 18:48:09
阅读次数:
68
一: 区间问题:什么时候用线段树,什么时候用ST 如果需要动态维护,需要添加或者删除,那么就必须用到线段树,线段树的单次查询时间为O(logn),如果查询量大还是很浪费时间。 在不需要动态维护的时候,ST算法的查询速度可以到达O(1) 二: 【什么样的问题适合ST算法】例如,RMQ问题和RGQ问题适 ...
分类:
其他好文 时间:
2020-02-07 14:42:26
阅读次数:
76