loj#6032. 「雅礼集训 2017 Day2」水箱(并查集 贪心 扫描线)
题意
Sol
神仙题+神仙做法%%%%%%%%
我再来复述一遍。。
首先按照\(y\)坐标排序,然后维护一个扫描线从低处往高处考虑。
一个连通块的内状态使用两个变量即可维护\(ans\)表示联通块内的最大答案,\(f\)表示联通块内\(k=1\)的数量
若当前的水超过了当前的挡板,那么将当前联通块和下一个位置所在的联通块合并。
若是一个\(k=0\)的操作,则一定满足。
若是\(k=1\)的操作,那么就将\(f++\),然后更新一下答案。
#include<bits/stdc++.h>
#define LL long long
using namespace std;
const int MAXN = 1e6 + 10, INF = 1e9 + 7, mod = 998244353;
template <typename A, typename B> inline bool chmin(A &a, B b){if(a > b) {a = b; return 1;} return 0;}
template <typename A, typename B> inline bool chmax(A &a, B b){if(a < b) {a = b; return 1;} return 0;}
template <typename A, typename B> inline LL add(A x, B y) {if(x + y < 0) return x + y + mod; return x + y >= mod ? x + y - mod : x + y;}
template <typename A, typename B> inline void add2(A &x, B y) {if(x + y < 0) x = x + y + mod; else x = (x + y >= mod ? x + y - mod : x + y);}
template <typename A, typename B> inline LL mul(A x, B y) {return 1ll * x * y % mod;}
template <typename A, typename B> inline void mul2(A &x, B y) {x = (1ll * x * y % mod + mod) % mod;}
inline int read() {
	char c = getchar(); int x = 0, f = 1;
	while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}
	while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
	return x * f;
}
int N, M, cnt, ans[MAXN], f[MAXN], fa[MAXN];
int find(int x) {
	return fa[x] ? fa[x] = find(fa[x]) : x;
}
struct Query {
	int opt, x, y;
	bool operator < (const Query &rhs) const {
		return y == rhs.y ? opt < rhs.opt : y < rhs.y;
	}
}q[MAXN];
void solve() {
	memset(ans, 0, sizeof(ans)); memset(f, 0, sizeof(f)); memset(fa, 0, sizeof(fa));
	cnt = 0;
	N = read(); M = read();
	for(int i = 1; i < N; i++) q[++cnt] = {-1, i, read()};
	for(int i = 1; i <= M; i++) q[++cnt].x = read(), q[cnt].y = read(), q[cnt].opt = read();
	stable_sort(q + 1, q + cnt + 1);
	int ret = 0;
	for(int i = 1; i <= cnt; i++) {
		int op = q[i].opt, x = q[i].x;
		if(op == -1) {
			int y = find(x + 1); x = find(x);
			fa[y] = x; f[x] += f[y]; ans[x] += ans[y]; chmax(ret, ans[x]);
		} else if(op == 0) {
			chmax(ret, ++ans[find(x)]);
		} else {
			x = find(x); chmax(ans[x], ++f[x]);
			chmax(ret, ans[x]);
		}
	}
	cout << ret << '\n';
}
int main() {
	for(int T = read(); T--; solve());
	return 0;
}
												
											loj#6032. 「雅礼集训 2017 Day2」水箱(并查集 贪心 扫描线)的更多相关文章
- LOJ#6032. 「雅礼集训 2017 Day2」水箱
		
传送门 首先可以有一个平方复杂度的 \(DP\) 设 \(f_{i,j}\) 表示前面 \(i\) 个小格,高度为 \(j\) 的最大答案 令 \(h_i\) 表示隔板 \(i\) 的高度 当 \(j ...
 - loj #6032. 「雅礼集训 2017 Day2」水箱 线段树优化DP转移
		
$ \color{#0066ff}{ 题目描述 }$ 给出一个长度为 \(n\) 宽度为 \(1\) ,高度无限的水箱,有 \(n-1\) 个挡板将其分为 \(n\) 个 \(1 - 1\) 的小格, ...
 - loj#6033. 「雅礼集训 2017 Day2」棋盘游戏(二分图博弈)
		
题意 链接 Sol 第一次做在二分图上博弈的题..感觉思路真是清奇.. 首先将图黑白染色. 对于某个点,若它一定在最大匹配上,那么Bob必胜.因为Bob可以一直沿着匹配边都,Alice只能走非匹配边. ...
 - [LOJ#6033]. 「雅礼集训 2017 Day2」棋盘游戏[二分图博弈、匈牙利算法]
		
题意 题目链接 分析 二分图博弈经典模型,首先将棋盘二分图染色. 考虑在某个最大匹配中: 如果存在完美匹配则先手必败,因为先手选定的任何一个起点都在完美匹配中,而后手则只需要走这个点的匹配点,然后先手 ...
 - loj#6034 「雅礼集训 2017 Day2」线段游戏
		
分析 区间李超树板子题 代码 #include<bits/stdc++.h> using namespace std; #define db double const int inf = ...
 - 「雅礼集训 2017 Day2」水箱
		
题目链接 题意分析 我们用\(f[i][j]\)表示当前到达第\(i\)个位置水位高度为\(j\)的答案 如果那么\(h[i]\)为\(i\)和\(i+1\)之间的支柱高度 那么如果\(j≤h[i]\ ...
 - 「雅礼集训 2017 Day2」水箱 (数据结构+dp ,一个log)
		
题面 题解 在网上看到有些做法,有什么平衡树.启发式合并等等总之复杂度O(Tnlog^2(n))的不优做法,这里我就用一个O(Tnlogn)的做法好了 其实大体上推导的思路都是一样的. 我们很容易发现 ...
 - 「雅礼集训 2017 Day2」解题报告
		
「雅礼集训 2017 Day2」水箱 我怎么知道这种题目都能构造树形结构. 根据高度构造一棵树,在树上倍增找到最大的小于约束条件高度的隔板,开一个 \(vector\) 记录一下,然后对于每个 \(v ...
 - [LOJ 6031]「雅礼集训 2017 Day1」字符串
		
[LOJ 6031] 「雅礼集训 2017 Day1」字符串 题意 给定一个长度为 \(n\) 的字符串 \(s\), \(m\) 对 \((l_i,r_i)\), 回答 \(q\) 个询问. 每个询 ...
 
随机推荐
- 关于springmvc的helloworld的压测报告
			
都说hello world 很简单,应该能承受很大的请求压力,那么到底有多大?你知道吗?如果知道,那咱们就不继续了.如果不知道,我们来看一下! 1. 准备工作,快速建立一个基于springmvc的he ...
 - linux定时任务执行没结果,手动执行有结果问题总结
			
今天写了个脚本手动执行有结果,但是放到系统定时任务跑却没结果,之前也遇到这种问题解决了没记录后面又懵逼了一次~~~ 如下图: 手动执行有结果 放到定时任务中每五分钟执行一次 解决方法: 脚本中加载系统 ...
 - 课程回顾-Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization
			
训练.验证.测试划分的量要保证数据来自一个分布偏差方差分析如果存在high bias如果存在high variance正则化正则化减少过拟合的intuitionDropoutdropout分析其它正则 ...
 - springboot与ActiveMQ整合
			
前言 很多项目, 都不是一个系统就做完了. 而是好多个系统, 相互协作来完成功能. 那, 系统与系统之间, 不可能完全独立吧? 如: 在学校所用的管理系统中, 有学生系统, 资产系统, 宿舍系统等等. ...
 - linux 命令 — download
			
wget 下载工具 一般 wget url 下载url指定的资源,日志输出到stdout,文件名称和url中指定的资源名称一致 wget url -o log -O file -o:指定日志输出到的文 ...
 - Go随机数
			
Go math/rand包用于生成随机数. 代码: package main import "fmt" import "math/rand" func main ...
 - NiftyNet项目介绍
			
NiftyNet项目介绍 简述 NiftyNet是一款开源的卷积神经网络平台,旨在通过实现医学图像分析的深度学习方法和模块,支持快速原型和再现性,由WEISS (Wellcome EPSRC Ce ...
 - 最近公共祖先(least common ancestors,LCA)
			
摘要: 本文主要介绍了解决LCA(最近公共祖先问题)的两种算法,分别是离线Tarjan算法和在线算法,着重展示了在具体题目中的应用细节. 最近公共祖先是指对于一棵有根树T的两个结点u和v,它们的LCA ...
 - HBase的java客户端测试(一)---DDL操作
			
测试准备 [首先同步时间:] for node in CloudDeskTop master01 master02 slave01 slave02 slave03;do ssh $node " ...
 - 反爬虫——使用chrome headless时一些需要注意的细节
			
以前我们介绍过chrome headless的用法(https://www.cnblogs.com/apocelipes/p/9264673.html). 今天我们要稍微提一下其中一个细节. 反爬和w ...