首页 > 其他分享 >【双堆懒删除】codeforces 1294 D. MEX maximizing

【双堆懒删除】codeforces 1294 D. MEX maximizing

时间:2024-12-02 23:34:32浏览次数:4  
标签:双堆 元素 maximizing 删除 de codeforces leq ex MEX

前言

双堆懒删除

当需要维护若干元素中的最大值(或最小值)时,可以用一个堆维护,但是堆只擅长处理堆顶元素,对堆中任意元素的处理就束手无策了。此时,可以引入另外一个堆,我们定义原来的堆为保存堆 \(ex\),新的堆为懒删除堆 \(de\)。那么当需要从保存堆中删除任意一个元素时,可以先将元素放入懒删除堆 \(de\) 中。当需要从保存堆 \(ex\) 中取出元素时,若保存堆的堆顶与删除堆的堆顶相同,则共同弹出堆顶元素,循环此过程直至当堆顶不再相同时,保存堆堆顶元素就是当前最大值(或最小值)。

题目

https://codeforces.com/problemset/problem/1294/D

题意

第一行,输入两个正整数 \(n, m(1 \leq n, m \leq 4*10^5)\),接下来 \(n\) 行每行输入一个非负整数 \(w_i(0 \leq w_i \leq 10^9)\)。

在每次询问时,你都可以将现有的任意个数进行 \(w_i = w_i \pm m\),且对每个数都可以执行任意次操作(包括 \(0\) 次)。当操作完成后,输出最大的 MEX(\(w\))。

题解

首先思考: \(w_i\) 进行任意次 \(w_i = w_i \pm m\) 操作后,\(w_i\) 能转变的值有哪些?不能转变的值有哪些?
例如:\(m = 3, w_i = 5\),进行任意次转变后,\(w_i\) 可以转变的值有 \(change = [2, 5, 8, ...]\),不能转变的有 \(1, 3, 4, 6, 7, ...\)。
观察可以发现:可以转变的值,都是可以通过 \(min(change) + 3x(0 \leq x)\) 转变的,而 \(min(change) = w_i % m\)。

因此,可以根据对 \(m\) 取模的结果分为 \(m\) 份,统计每份的数量。\(MEX\) 为数量最少的数中数值最小的数 + 数量 \(\times\) 数量最少的数中最小的数对 \(m\) 取模的结果。

若用一个数组维护每份的数量,每一次查询 \(MEX\) 的时间复杂度都是 \(O(n)\),总体时间复杂度就会来到 \(O(n^2)\),显然不可接受。

可以用双堆懒删除对维护每份的数量进行维护,时间复杂度为 \(O(m + nlogm)\)。

参考代码

#define PII pair<int, int>

constexpr int N = 4e5 + 7;
int n, m, w;
int a[N];
 
void solve() {
	cin >> n >> m;
	priority_queue<PII, vector<PII>, greater<PII>> ex, de;
	for (int i = 0; i < m; ++ i) ex.emplace(make_pair(0, i));
	while (n --) {
		cin >> w;
		de.emplace(make_pair(a[w % m] ++, w % m));
		ex.emplace(make_pair(a[w % m], w % m));
		while (!de.empty() && !ex.empty() && de.top() == ex.top()) {
			de.pop();
			ex.pop();
		}
		cout << ex.top().second + ex.top().first * m << '\n';
	} 
}

标签:双堆,元素,maximizing,删除,de,codeforces,leq,ex,MEX
From: https://www.cnblogs.com/RomanLin/p/18578699

相关文章

  • Educational Codeforces Round 169 (Rated for Div2)
    EducationalCodeforcesRound169(RatedforDiv.2)-CodeforcesProblem-A-Codeforces构造签到题,明显只有\(n\leq2\)的时候有解#include<bits/stdc++.h>usingnamespacestd;constintN=2e5+10;typedefpair<int,int>pii;intn,m;inta[N];voidsolve(......
  • Educational Codeforces Round 171 (Rated for Div
    EducationalCodeforcesRound171(RatedforDiv.2)-CodeforcesProblem-A-Codeforces几何构造没什么好说的,\(45\)度交的时候长度最大#include<bits/stdc++.h>usingnamespacestd;constintN=3e5+10;voidsolve(){ intx,y,k;cin>>x>>y>>k; if(x......
  • E. Photoshoot for Gorillas(Codeforces Round 966 (Div. 3))
    https://codeforces.com/contest/2000/problem/E题目描述你非常喜欢屮大猩猩,于是你决定为它们组织一次拍摄活动。大猩猩生活在丛林中,丛林被表示为一个有n行m列的网格,有w个大猩猩同意参与拍摄,第i个大猩猩的身高ai.你希望将所有大猩猩放置在网格的单元格中,并且确保每个单......
  • 每日一题:https://codeforces.com/contest/1700/problem/B
    题目链接:https://codeforces.com/contest/1700/problem/B#include<iostream>#include<string.h>#include<string>#include<cmath>#include<algorithm>usingnamespacestd;intmain(){intu;cin>>u;for(inti=1;i......
  • Codeforces Round 987 (Div. 2)
    目录写在前面A签到B结论,枚举C构造,数学D枚举,数据结构Edfs,树形DP,构造写在最后写在前面比赛地址:https://codeforces.com/contest/2031退役?累了。妈的明天体测测完直接飞昆明感觉要爆了、、、A签到保证给定序列不升,要求修改到不降,则将所有元素修改至相等一定是不劣的。......
  • 【二分+前缀和+后缀和】codeforces 2026 D. Sums of Segments
    题目https://codeforces.com/problemset/problem/2026/D题意第一行输入一个正整数\(n(1\leqn\leq3e5)\),第二行输入\(n\)个整数\(a_1,a_2,...,a_i,...,a_n(-10\leqa_i\leq10)\),第三行输入一个正整数\(q(1\leqq\leq3e5)\),随后\(q\)行,每行输入两个整数\(......
  • 每日一题:https://codeforces.com/contest/1999/problem/D
    题目链接:https://codeforces.com/contest/1999/problem/D#include<iostream>#include<string>#include<vector>usingnamespacestd;intmain(){intn;cin>>n;for(;n>0;n--){stringarr1;stringarr2;......
  • Codeforces 赛题整合1
    对于训练赛的赛题整合。文章目录2033D-Kousuke'sAssignment题意:题解:代码2033C-Sakurako'sFieldTrip题意题解代码2022B-KarSalesman题意题解代码2025C-NewGame题意题解代码2033D-Kousuke’sAssignmentcodeforces链接题意:找出数组中最多有多少......
  • Codeforces 333 题目研讨
    题目传送门:ABCDEA解法:注意到最终支付的一定是\(3^k\)的钱。即得。B解法:不难发现芯片的前进路上不能有障碍,否则不可能在\(n-1\)步内完成。然后又不难发现,同一行或一列只能放一个。双不难发现,当\(n\)为奇数时,中行或中列可能会冲突,此时需要移除其中一个。叒不难发现,当......
  • Codeforces Round 986 (Div. 2) A-C
    A.Alice'sAdventuresin"Chess"AliceistryingtomeetupwiththeRedQueeninthecountryside!Rightnow,Aliceisatposition\((0,0)\),andtheRedQueenisatposition\((a,b)\).Alicecanonlymoveinthefourcardinaldirecti......