首页 > 其他分享 >C. Colorful Table

C. Colorful Table

时间:2023-10-22 16:11:21浏览次数:34  
标签:p2 last Colorful min int max Table first

C. Colorful Table
设p1为最左边的a[p1]>=i,p2为最右边的a[p2]>=i,则i的面积大小为行的p1-p2,列的p1-p2,大小为2*(p2-p1+1)
但是如果暴力的去求每个点的左右端点,肯定会超时,有没有办法优化呢?
1.我们想到,大的数一定包含小的数:如果大的数算出来了,那么比他小的数一定也满足条件,可以递推
2.再用两个数组记录自己第一次出现和最后一次出现的位置

点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e5 + 10;
#define LL long long
int a[N], last_[N], first_[N], min_first[N], max_last[N];
void solve() {
	int n, k;
	cin >> n >> k;
	memset(first_, 0, sizeof first_);
	memset(last_, 0, sizeof last_);
	for (int i = 1; i <= n; i++) cin >> a[i];
	for (int i = 1; i <= n; i++) {//算第一次和最后一次出现的位置
		if (!first_[a[i]]) first_[a[i]] = i;
		last_[a[i]] = i;
	}
	for (int i = 1; i <= k+1; i++) min_first[i] = 1e9, max_last[i] = -1e9;
	for (int i = k; i >= 1; i--) {
		if (last_[i]) max_last[i] = max(max_last[i + 1], last_[i]);//要么继承,要么自己的更优
		else max_last[i] = max_last[i + 1];//不算,但是要继承上面的
	}
	for (int i = k; i >= 1; i--) {
		if (first_[i]) min_first[i] = min(min_first[i + 1], first_[i]);
		else min_first[i] = min_first[i + 1];
	}
	for (int i = 1; i <= k; i++) {
		if (!first_[i]) {//没出现,返回0
			cout << "0 ";
			continue;
		}
		cout << 2 * (max_last[i] - min_first[i] + 1) << ' ';
	}
	cout << '\n';
}
int main() {
	int t;
	cin >> t;
	while (t--) {
		solve();
	}
	return 0;
}

标签:p2,last,Colorful,min,int,max,Table,first
From: https://www.cnblogs.com/bu-fan/p/17780582.html

相关文章

  • iptables
    iptables是Linux系统下的防火墙工具,可以用于配置和管理网络访问规则。以下是iptables的50条常用命令:查看当前防火墙规则:iptables-L清空所有防火墙规则:iptables-F允许所有本地回环接口的访问:iptables-AINPUT-ilo-jACCEPT允许已建立的连接进入:iptables-AINPUT-mstate......
  • 【大揭秘】美团面试题:ConcurrentHashMap和Hashtable有什么区别?一文解析!
    正文亲爱的小伙伴们,大家好!我是小米,一个热爱技术分享的程序员,今天我为大家带来了一篇有关美团面试题的热门话题:ConcurrentHashMap和Hashtable有什么区别。这个问题在Java面试中常常被拿来考察对多线程编程的理解,所以务必认真学习,不仅仅是为了通过面试,更是为了提高自己在多线程编......
  • The innodb_system data file 'ibdata1' must be writable
    安装mysql-5.7.32数据库时,MySQL无法启动Active:deactivating(stop-sigterm)(Result:exit-code)查看配置文件中的日志存储位置:view/etc/my.cnf查看日志存储文件位置:/var/log/mysqld.log文件错误提示:Theinnodb_systemdatafile'ibdata1'mustbew......
  • 什么是 nftables ? 它与 iptables 的区别是什么?
    与iptables相比,nftables的语法更加简单,不过对于iptables中的语法,在nftables中也能用。大家可使用iptables-translate工具,该工具接受iptables命令并将其转为等效的nftables命令,这是了解两种语法差异的一种简单方法。使用以下命令在Ubuntu和基于Debian的发行版上......
  • [920] Copy the font style from one cell in a table of a Word document to another
    TocopythefontstylefromonecellinatableofaWorddocumenttoanothercellusingPythonandthepython-docxlibrary,youcanaccessthefontpropertiesofthesourcecellandapplythemtothetargetcell.Here'showyoucandoit:First,ma......
  • 错误:You can't specify target table 'xxx' for update in FROM clause的解决
    deleteFROMusrloginwheremember_id=(SELECTmember_idFROMusrloginWHERElogin_id='#011SkhVVje27smbxek0XwjKeA==');会出现报错信息:Youcan'tspecifytargettable'tempA'forupdateinFROMclause大致意思是,在同一语句中,不能先select出同一表中的......
  • Codeforces Round 872 (Div. 2) B. LuoTianyi and the Table
    给一个\(n\timesm\)的矩阵和\(n\timesm\)个数,你需要把这些数填入矩阵。保证\[\sum_{i=1}^n\sum_{j=1}^m\left(\mathop{max}\limits_{1\leqx\leqi,1\leqy\leqj}a_{x,y}-\mathop{min}\limits_{1\leqx\leqi,1\leqy\leqj}a_{x,y}\right)......
  • iptables常用命令
    iptables是用于配置Linux系统中的防火墙规则的命令行工具。其命令格式和常用参数的意思如下:iptables[选项]<链名><规则规范>常用选项:-A:添加规则到指定链的末尾。-D:从指定链中删除规则。-I:插入规则到指定链的开头。-L:列出指定链的规则。-F:清除指定链中的所有规则。-P:......
  • ASP.NET 定时发送邮件以及将数据库的数据以table形式发送
    1:代码写在Global.aszx中,系统自动运行 2:对Send()方法进行编辑,设定发送的时间、发送邮箱和接收邮箱publicvoidSend(objectsender,System.Timers.ElapsedEventArgse){SqlConnectionmyconn=newSqlConnection("DataSource=100.0.4.51;InitialC......
  • CompletableFuture异步优化代码
    CompletableFuture异步编排优化代码我们在项目开发中,有可能遇到一个接口需要调用N个服务的接口。比如用户请求获取订单信息,需要调用用户信息、商品信息、物流信息等接口,最后再汇总数据统一返回。如果使用串行的方法按照顺序挨个调用接口,这样接口的响应的速度就很慢。如果并行调用......