![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
线段树
z听歌的小孩z
这个作者很懒,什么都没留下…
展开
-
Greedy Sequence(线段树维护区间最大值)
题目链接题意:给一个数列 a ,包含n个不重复的元素。需要你构造n个s串,对于每一个 si 串,需要满足以下几个条件。si串要包含n个元素,每个元素都应取自a数列,且最多取一次。 si[ 1 ] = i ;且 si[ j ] < si[ j - 1] (j>=2) ; 设pos[ j ]为元素si[ j ] 在a数列的位置,要保证 | pos[j]-pos[j-1]...原创 2019-09-01 19:57:41 · 274 阅读 · 0 评论 -
2019牛客多校赛第十场F.Popping Balloons(线段树)
题目链接题意:在一个n*n的二维空间上有任意个气球,你可以横着发射三发子弹,竖着发射三发子弹,且要求每连续两发子弹的间距要恰好等于r。每发子弹可以打掉一排或者一列的气球,问你最多可以打掉多少个气球。题解:这题思路其实不难想。将每连续三行的气球合并放在线段树里,维护气球个数最大值。然后暴力枚举每三列气球,每次先将这三列的气球在线段树去掉,更新后再求得行最大值,就是答案,然后再把删除的点的更新...原创 2019-09-03 18:53:01 · 168 阅读 · 0 评论 -
2019牛客暑期多校训练营(第九场)E . All men are brothers(并查集+线段树维护dp)
题目链接题意:有n个人互相不认识,m次操作给出x,y使x和y认识,间接认识也算认识。每次操作后问你有多少种方案使得从其中选取4个人互不认识。题解:互相认识的过程其实就是形成联通块的过程,这里我们可以使用并查集进行模拟。 然后我们得到一个个联通块,接下来就是排列组合了,每个联通块可以任选出一个人出来,与另外的联通块一起贡献答案。 设dp[i][j]表示前i个联通块选取j个人互不认识的...原创 2019-09-05 21:26:55 · 95 阅读 · 0 评论 -
The Preliminary Contest for ICPC Asia Xuzhou 2019 B. so easy(并查集 or 线段树)
题目链接题意:有n个点,有两种操作。1:标记x 点 无效; 2:查询x点后第一个有效点的下标(包括本身)。题解:比赛时想到了并查集写法,无奈并查集写搓了。。。。1:map + 并查集 ,每个位置维护下一个有效位置。#include<bits/stdc++.h>using namespace std;unordered_map<int, int>pre...原创 2019-09-10 14:57:38 · 244 阅读 · 0 评论 -
The Preliminary Contest for ICPC Asia Xuzhou 2019 E. XKC's basketball team (线段树写法)
我只想问出题人,这题是不是在黑我坤坤???题目链接题意:有n个人,每个人都有一个w值。问每个人右边最远的且大于等于wi+m的位置。题解:我用了三种写法。这里都说一下。1.单调序列,从后往前维护一个单调递增的序列,然后对于第i个人在这个序列中二分一下就行了。原理是,我比你大且比你位置靠后,选我肯定最优。代码就不贴了。2权值线段树写法。先离散化,建权值线段树,线段树维护区间下标...原创 2019-09-10 15:20:22 · 105 阅读 · 0 评论 -
The Preliminary Contest for ICPC Asia Xuzhou 2019 I. query(线段树写法)
I. query题意:给你一个长度为n的排列,询问m次区间,问区间内有多少对i,j 使得 gcd(pi,pj)= min(pi,pj)。题解:gcd(pi,pj)= min(pi,pj)实际上就是pi,pj成倍数关系。首先可以预处理出所有的成倍数关系的pi,pj对。大概只有(1 + 1/2 + 1/3 + 1/4 + 1/5 + .....)* 1e5 =1166750 这么多对...原创 2019-09-14 11:04:11 · 174 阅读 · 0 评论 -
Codeforces Round #590 (Div. 3) - E. Special Permutations (补题)
题目链接这题赛后看了一下,挺水的,十分钟出思路。然后自己傻逼了,竟然套了一个线段树去写,强行提高时间复杂度,其实差分一下就好了。题意:定义这样一个排列 pi(n),表示将1 ~ n 这个排列的 第 i 个元素放到序列最前面,形成一个新的排列。 定义pos(pi(n),3) 表示 3 在这个排列的下标是多少 给你一个数组x 定义方程 然后求f(p1(n)),f(p2(n)),f(...原创 2019-10-03 09:48:19 · 381 阅读 · 0 评论 -
2019牛客暑期多校训练营(第七场)E.Find the median(权值线段树 + 区间离散化)
题目链接题意:这题就是先让你套个公式把n个区间算出来,然后对于单个区间在序列里加上这个区间内所有数,然后再求此时序列的中位数。题解:中位数实际上就是求整个序列第n/2大,考虑权值线段树,但是因为区间范围太大,所以要对区间进行离散化。离散化之前,首先要将所有区间的左端点减1。为什么呢?因为离散化后线段树上的每个点存的实际上是一段区间,那么比如区间【3,8】,离散化之前我们要把它变成(2,...原创 2019-10-04 10:03:32 · 172 阅读 · 0 评论