首页 > 其他分享 >CF269D - Maximum Waterfall

CF269D - Maximum Waterfall

时间:2023-05-15 21:55:36浏览次数:36  
标签:int CF269D Maximum 转移 1e9 Waterfall 区间 id se

比较迷糊,比较乱搞。

我们考虑从上往下进行 \(dp\),\(dp_i\) 表示从顶上水槽 \(i\) 最多的流量。然后我们发现,每个高度,能用来进行转移的区间一定没有被完全覆盖。也就是,只有在遮挡关系中被覆盖的区间可能被用来转移。

同时,每个区间还是有要求的,比如 \([1,3]\) 的 \([2,3]\) 部分后来被覆盖了,但是 \([1,2]\) 依旧可以转移,因为 \([2,3]\) 不会成为中间障碍,而 \([1,3]\) 就不可以。

所以我们发现,每个颜色段区间还存在转移区间,初始是 \([-\infty,+\infty]\),每次被断开或部分遮挡的时候,就更改转移区间为被遮挡部分和剩余部分的交界。而只有不超过转移区间的新区间,才能使用这个区间进行转移。

我们考虑 ODT 维护区间,每次找到所有和当前水槽区间存在交集的区间,提取出来,看转移区间是否符合进行转移。然后进行区间推平,将当前的 \([l,r]\) 全部推平为自己,两边出现断开,更新转移区间。

这题出现的时候还没有 ODT 所以不用担心 ODT 会被卡

我们发现这题的操作是比较均匀的,每次一次查询一次推平。那么它的复杂度就是有保证的。我们发现,每次最多加入新的三个区间(新区间,左端点,右端点)。所以被加入的区间总和就是 \(O(n)\) 的。而每次访问之后一定会被推平,所以每个元素只会被访问一次。那么复杂度就有保证是 \(O(n\log n)\) 的。

int n,t,h[100005],l[100005],r[100005],to[100005];
int dp[100005];
struct node{
	int id,l,r,L,R;
	node(){
		id=l=r=L=R=0;
	}
	node(int _id,int _l,int _r){
		id=_id,l=_l,r=_r,L=-1e9,R=1e9;
	}
	node(int _id,int _l,int _r,int _L,int _R){
		id=_id,l=_l,r=_r,L=_L,R=_R;
	}
	bool operator <(const node b)const{
		return l<b.l;
	}
};
set<node>se;
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cin>>n>>t;
	rp(i,n)cin>>h[i]>>l[i]>>r[i];
	n++,h[n]=0,l[n]=-1e9,r[n]=1e9;
	l[n+1]=-1e9,r[n+1]=1e9;
	rp(i,n)to[i]=i;
	sort(to+1,to+1+n,[](int x,int y){
		return h[x]>h[y];
	});dp[n+1]=2e9;
	se.insert(node(n+1,-1e9,1e9));
	rp(o,n){
		int i=to[o],x=l[i],y=r[i];
		vt<node>v;
		auto k=se.lower_bound({i,x,y});
		if(k!=se.begin()){
			k--;
			if(k->r>x){
				v.pb(*k);
				se.erase(k);
			}
		}k=se.lower_bound({i,x,y});
		while(k!=se.end()&&k->l<y){
			v.pb(*k);se.erase(k);
			k=se.lower_bound({i,x,y});
		}
		for(auto k:v)if(k.L<=x&&y<=k.R){
			dp[i]=max(dp[i],min(dp[k.id],min(y,k.r)-max(x,k.l)));
		}
		for(auto k:v){
			if(k.l<x){
				se.insert({k.id,k.l,x,k.L,x});
			}
			if(k.r>y){
				se.insert({k.id,y,k.r,y,k.R}); 
			}
		}se.insert({i,x,y});
	}cout<<dp[n]<<endl;
	return 0;
}
//Crayan_r

标签:int,CF269D,Maximum,转移,1e9,Waterfall,区间,id,se
From: https://www.cnblogs.com/jucason-xu/p/17403260.html

相关文章

  • 微信小程序 自定义组件 监听数据变化 出现异常 Maximum call stack size exceeded.
    代码调用处: 组件内部  本地调试无异常,发布之后出现此异常解决方法:监听属性steps的值变化时,调用处不能使用双向绑定,去掉steps的双向绑定即可,具体的原因未知(不知为啥本地调试不会抛异常) ......
  • PAT Advanced 1007. Maximum Subsequence Sum
    PATAdvanced1007.MaximumSubsequenceSum1.ProblemDescription:Givenasequenceof\(K\)integers{\(N_1,N_2,...,N_K\)}.Acontinuoussubsequenceisdefinedtobe{\(N_i,N_{i+1},...,N_j\)}where\(1≤i≤j≤K\).TheMaximumSubsequencei......
  • codeforces 332B B. Maximum Absurdity(rmq)
    题目链接:codeforces332B题目大意:给出一个序列,让找出不互相覆盖的两个长度为k的段,问在两个段的权值和最大的情况下,按照左边段的左端点排序,右边段的左端点作为第二关键字排序,得到的第一个答案。题目分析:很水的数据结构的题目,我们只需要先利用前缀和预处理出所有长度为k的段的总权值......
  • Codeforces 1810G - The Maximum Prefix(DP)
    挺小清新的一道计数题。首先先分析下这个“最大前缀和”,按照最朴素的思路就是扫一遍每个前缀,然后记录一下当前的\(sum\)与前面的\(mx\),但是如果你一直陷在这个思路上你就似了,因为按照这个思路做,你DP状态里需要记录\(sum\)和\(mx\)两个维度,算上下标一维总共是\(n^3\),并......
  • 2023-04-14 uni-popup 报错:Error in config.errorHandler: "RangeError: Maximum call
    问题描述:首次导入uniapp的uni-popup,在项目中使用时报错,业务场景为:页面渲染完成后显示弹窗。报错:Errorinconfig.errorHandler:"RangeError:Maximumcallstacksizeexceeded"config.errorHandler中的错误:“RangeError:超出了最大调用堆栈大小”页面如下:<uni-popupref="l......
  • UVA - 108 Maximum Sum 求子矩阵的最大和
    题目大意:给出一个矩阵,求出这个矩阵中的子矩阵的最大和解题思路:和UVA507的题目类似,只不过这次是个矩阵了,换个角度思考,将这个二维数组转换成一维数组思考,用sum存储该列的前N个数字的和,如,sum[3][1]就是第一列的前三个数字的和,这样就可以将其想象成一维的最大连续和了,在枚举行,求其最大的和......
  • [LeetCode] 1339. Maximum Product of Splitted Binary Tree 分裂二叉树的最大乘积
    Giventhe root ofabinarytree,splitthebinarytreeintotwosubtreesbyremovingoneedgesuchthattheproductofthesumsofthesubtreesismaximized.Return themaximumproductofthesumsofthetwosubtrees.Sincetheanswermaybetoolarge,re......
  • mysql Error:index column size too large. the maximum column size is 767 bytes
    问题现象mysql在执行脚本create创建表时,提示以下错误:indexcolumnsizetoolarge.themaximumcolumnsizeis767bytes异常原因INNODB引擎,UTF-8,主键字符串默认最大767,需要修改解决方案对数据库进行设置setglobalinnodb_large_prefix=ON参考博客......
  • Maximum and Minimum Height and Width in Internet Explorer
    MaximumandMinimumHeightandWidthinInternetExplorer Beholdtheseventhwonderofthevirtualworld:max/min-heightandmax/min-widthpropertiesarepossi......
  • 「题解」ABC290F Maximum Diameter
    没动脑子就gf一路写下来了......实际上就是把插板法的gf写了一下/zk首先考虑一下一个\(X\)合法是什么情况,那就是总和是\(2n-2\)并且保证\(0<X_i<n\)。证明就考......