解题思路:我们可以将这个问题转换成看一个坐标向上或者想右(分别表示了竖着和横着)可以放一个新的机器,那
题解思路:根据题意我们只需要维护区间最大的值和最小的值就够了,那么
题目链接:点击打开链接题解思路:用后缀数组处理得到的hight数组后,对它再进行线段建树,维护的是区间内最小的一个值,那么我们每次界+1的max,ans_min
Codeforces Round #851 (Div. 2)
题目链接:https://nanti.jisuanke.com/t/41306解题思路:一个前提结论就是假定第i个人开始是机洗,那么他前面的肯定都是手洗他后面的都是机洗。这也很好证明,假定我第j个
题目链接:https://www.jisuanke.com/contest/3870?view=challenges解题思路:也就是CF这道题反着过来,这一题变成和右结合。道
题目链接:https://vjudge.net/problem/Gym-101955E 解题思路:距离转化:
题目链接:https://codeforces.com/contest/1263A - Sweet Problem把最小值分摊给其他两个,然后剩下的再加上最小值#include<bits/st
题目链接:https://vjudge.net/problem/HDU-3308 解题思路:题目很明显的线段树,但不是那么好写。要求区
题目链接:点击打开链接 题解思路:假设dp[i][1]为到i位置尾部是1个个数有几个,dp[i][0]也是如此,那么假设第i个位置放1,那么dp[i][1] = dp[i-1][1]+dp[i-1][0]+1,dp[i][0] = dp[i-1][0],如果第i个位置放0那么dp[i][0] = dp[i-1][1]+dp[i-1][0]+1,dp[i][1] = dp[i-1][1].我..
题解思路:线段树维护每段中的最大和最小值。代码:#include#include#include#include#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1#define inf 0x3f3f3f3fusing namespace std;typedef long long ll;const int mx
题解思路:这题暴力也能过,暴力和线段是也就差了300ms左右。那么我们讲线段树怎么做minv[o]表示从这个区间的左边界出发经过这个区间内的任意一点后到达1的最小距离,当然当时从一颗子树的叶子节点跟另一颗子树的某几个头节点组成的区间是无效的不需要纠结。addv【o】保存的是o-(o>>1)之间向上父节点的几段距离。那么就有minv[o]=min(minv[lc]+addv[lc],mi
题解;暴力线段树肯定超时,这里只能采用”继承”方式将父亲增加的值传给儿子细化操作。代码#include#include#include#include#include#include#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1using namespace std;typedef long long ll;
题目链接:点击这里解题思路:对原始的N的点建立KDtree,对于M个操作,黑棋加入新节点,白棋查询最近曼
题目链接 :点击打开链接题目要求开根那么再大的一个数不超过十次开根就会变成1,那么此时就不需要再更新了,所以用线段树只需特判这个点就可以了。题解:#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #define lson l,m,rt<<1
解题思路:二维线段树入门题点击入门 //poj 1195#include<cstdio>#include<iostream>#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1using namespace std;typedef long long ll;cons...
学习二维线段树时想必肯定已经会了一维的了。那么二维线段树其实可以简单的理解为固定了一维
题目链接:点击这里 解题思路:把身高看做一维,活泼度看做一维,做基本的二维线段树区间求最大,小数点先乘10把它化为整数才能做线段树。 #include<cstdio>#include<iostream>#include<cstring>#define lson l,mid,rt<<1#define rson mid+1,...
解题思路:这里简单粗暴的用了懒人标记的二维线段树,实际上可以利用01异或的性质可以不用去更新儿
链接:点击打开链接题解:二分预处理出来每个点单次传染到的左右范围,再用线段树维护每个点最终的范围最小值、最大值,利用线段树不断扩大范围并更新。随机一个 1 ~ n代码:#include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include<iostr
题目链接:点击这里 解题思路:以前做区间修改都是一种标记,可以直接标记.而现在这题既有乘法更新又
题目链接:https://vjudge.net/problem/ZOJ-4066 解题思路:"枚举最小值+线段
题目链接:点击这里 解题思路:这题还不让离线真的是,不过它把关键放在了删除上面,这就是一个区间被覆盖之后就会被删除了。那么这个问题就可以用O(nlogn)来解决了.用左端点l来离散建立线段树,右端点r作为区间值。线段树维护区间最大值.那么我们去查询x的时候实际上就是在线段树[1,x]中去查找值不小于x的点,然后把它删除,之后改变他的值为负无穷,因为他已经被删除了。这就是为什么可以用O(n
Copyright © 2005-2023 51CTO.COM 版权所有 京ICP证060544号