首页 > 其他分享 >P9842 [ICPC2021 Nanjing R] Klee in Solitary Confinement

P9842 [ICPC2021 Nanjing R] Klee in Solitary Confinement

时间:2023-11-16 21:46:19浏览次数:25  
标签:P9842 Solitary ICPC2021 Klee int 贡献 maxn 众数 times10

P9842 [ICPC2021 Nanjing R] Klee in Solitary Confinement

你说得对,但是 Klee 比根号可爱捏

题意简述

给定 \(n,k\) 和一个长为 \(n\) 的序列,你可以选择对区间 \([l,r]\) 的数整体加上 \(k\),也可以不加。最大化众数出现次数并输出。

分析

直接做肯定是不好做的,考虑转换思路,考虑区间 \(+k\) 操作的贡献。

假设已知 \(a\) 为众数,那么区间内值为 \(a-k\) 的数就回产生 \(1\) 的贡献,而值恰好为 \(a\) 的数就会产生 \(-1\) 的贡献。于是如果给定了 \(a\),就要找到最大的贡献区间。

枚举区间肯定不可行,考虑到最后的众数一定为 \(a_i\) 或者 \(a_i+k\) 的某个值,于是对于序列的任意位置 \(i\) 统计 \(a_i\) 和 \(a_i+k\) 的贡献,依次累加,并在过程中去最大值作为答案。如果在某个位置时,\(a_i\) 的贡献小于 \(0\) 就舍去并重新开始计算(因为再继续做答案一定不会更优)。

注意需要特判 \(k=0\) 的情况,此时直接输出原众数即可。

这道题的特殊处理技巧还有通过把所有数 \(+2\times10^6\) 把值域从 \([-2\times10^6,2\times10^6]\) 提升到 \([0,4\times10^6]\),这样就可以直接开数组当桶来统计答案。

Code

#include <bits/stdc++.h>
#define int long long
using namespace std;

const int maxn = 4e6 + 5, posi = 2e6;
int n, k, a[maxn], ans = -1, c[maxn], t[maxn];

signed main() {
//Fast IO
	ios::sync_with_stdio(false);
	cin.tie(nullptr), cout.tie(nullptr);

	cin >> n >> k;
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
		c[a[i] + posi]++;
		ans = max(ans, c[a[i] + posi]);
	}
	if (k == 0) {
		cout << ans;
		return 0;
	}
	for (int i = 1; i <= n; i++) {
		t[a[i] + posi]--;
		if (t[a[i] + posi] < 0) t[a[i] + posi] = 0;
		t[a[i] + posi + k]++;
		ans = max(ans, c[a[i] + posi + k] + t[a[i] + posi + k]);
	}
	cout << ans;
	return 0;
}

标签:P9842,Solitary,ICPC2021,Klee,int,贡献,maxn,众数,times10
From: https://www.cnblogs.com/George-Pig-Orz/p/17837326.html

相关文章

  • P9840 [ICPC2021 Nanjing R] Oops, It's Yesterday Twice More
    P9840[ICPC2021NanjingR]Oops,It'sYesterdayTwiceMore注意到最后袋鼠要集中到一个点上,显然先走到四个角落之一再移动到点\((a,b)\)是最优的,可以证明,步数一定不超过\(3(n-1)\)。因为不知道具体要到哪一个角落里,因此记录\((a,b)\)到每个角落的距离并大力分类讨论即可......
  • P9847 [ICPC2021 Nanjing R] Crystalfly
    P9847[ICPC2021NanjingR]Crystalfly你说得对,但是刻晴更可爱捏翻译给定一个\(n(1\len\le10^5)\)个节点的树,每个节点上有\(a_i\)只晶蝶。派蒙最初在\(1\)号节点,并获得\(1\)号节点的所有晶蝶,接下来每一秒她可以移动到相邻的节点上并获得节点上的所有晶蝶,但是当她每到......