首页 > 小苯的蓄水池(hard)
头像 _MZT_
发表于 2024-11-06 15:06:57
本题数据量较大,用并查集把移走挡板后联通的几个池子合并成一个连通块,求某个池子的蓄水量,只需向上找其祖宗的值和池子总数即可。(每个连通块中,编号大的池子为编号小的节点的父亲) #include<bits/stdc++.h> using namespace std; #define int 展开全文
头像 AK_heaven
发表于 2024-11-04 10:52:43
首先因为隔板的存在,所以整个水池开始是一坨一坨的,一共有 坨。 操作 就是把所有与 有交集的坨坨拿来进行合并,合并结果为总水量除以总池子数。 考虑用 set 维护,这样查询就是严格 级别的,我们来分析修改操作。 由于每次合并坨数都会减少 ,所以最多合并 次,均摊下来总复杂度为 ,这样总复杂 展开全文
头像 牛客290393167号
发表于 2024-11-12 11:55:55
不使用高级数据结构,仅用最基础算法的一个优雅的写法 思路:区间合并+前缀和 n,m=map(int,input().split()) pool=[0]+list(map(int,input().split())) s=[0]*(n+10) #前缀和 for i in range(1,n+1): 展开全文
头像 Leavery
发表于 2024-11-04 17:27:25
D&E线段树做法 #include <iostream> #include <iomanip> using namespace std; int a[200005]; struct elem { double val; int l,r; }; struct 展开全文
头像 已run的鲸鱼很喜欢修勾
发表于 2024-11-03 21:02:33
小苯的蓄水池线段树写法求debug:能过样例但零分 #include <bits/stdc++.h> using namespace std; const int N=1e5+10; double t[N]; double up[N],s[N]; double n,m; void bui 展开全文
头像 剑绝尘
发表于 2024-11-03 21:11:37
#include <bits/stdc++.h> using namespace std; const int N = 2e5+10; int n,m; int f[N]; double x; struct node{ double sum; int cnt; 展开全文