首页 > 其他分享 >洛谷 P6294

洛谷 P6294

时间:2022-10-28 14:45:38浏览次数:53  
标签:cnt 洛谷 int ++ 加数 ans P6294 mx

首先有一个显而易见的性质:每次取都是取最大的一个数。

然后就变成了加数,取最大值,加数,取最大值。。。

直接单走一个优先队列(

但是很明显这个数据不打算把优先队列放过去。

发现一个数加入集合时,如果它比集合中所有数都大,那它就会马上被拿走。

所以我们单独处理这些数。

把这些数去掉以后,剩下的数被取走的顺序显然是固定的。

考虑到这题值域与 \(n\) 同阶,我们考虑维护一个 \(mx\) 指针代表当前集合中最大的数。

然后每次如果要加进来的数大于 \(mx\),就可以直接处理。

否则则将这个数所对应的计数器加一。每次暴力减 \(mx\),直到有一个可以取的数。

单次询问 \(\mathcal O(n)\)。

Code:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 100005;
int n, m, p;
int a[N], cnt[N];

void solve(int p) {
	for (int i = 1; i < p; ++i) ++cnt[a[i]];
	int mx = n;
	ll ans = 0;
	for (int i = 1; i <= n; ++i) {
		if (i + p - 1 <= n) {
			if (a[i + p - 1] > mx) {
				if (i & 1) ans += a[i + p - 1];
				else ans -= a[i + p - 1];
				continue;
			}
			++cnt[a[i + p - 1]];
		}
		while (!cnt[mx]) --mx;
		if (i & 1) ans += mx;
		else ans -= mx;
		--cnt[mx];
	}
	printf("%lld\n", ans);
}

int main() {
	scanf("%d%d", &n, &m);
	for (int i = 1; i <= n; ++i) scanf("%d", &a[i]);
	while (m--) scanf("%d", &p), solve(p);
	return 0;
}

标签:cnt,洛谷,int,++,加数,ans,P6294,mx
From: https://www.cnblogs.com/Kobe303/p/16836041.html

相关文章

  • 洛谷 P1077 [NOIP2012 普及组] 摆花 (DP)
    https://www.luogu.com.cn/problem/P1077题目描述摆上m盆花。一共有n种花,从1到n标号。为了在门口展出更多种花,规定第i种花不能超过ai盆,摆花时同一种花放在一起,且不同......
  • 洛谷 P6963
    不难发现,包含关系只可能是短的路径被长的路径包含。那么我们考虑按照路径长度从小到大,一条一条路径边加入边判断。考虑先将树上的所有边断开,每加入一条路径的时候就将这......
  • 洛谷 P7023
    首先可以发现一些有用的性质:每个数至多操作一次如果一个数,在原数列中有它的倍数,那么改变成那个数一定是最优的。否则可以改变成所有数的最小公倍数。贪心的,按出现次数......
  • 洛谷P3225 [HNOI2012]矿场搭建
    SLOJH7136.「HNOI2012」矿场搭建题目描述煤矿工地可以看成是由隧道连接挖煤点组成的无向图。为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援......
  • 洛谷 P8595 「KDOI-02」一个网的路 蓝 题解
    定义树形\(DP\),这个挺明显的,我认为\(DP\)让读者理解的最重要的一步是:定义。所以我先详细说明\(f\)数组的定义,至于为什么这么定义后面再讲。\(f_{u,type}\),其中\(......
  • 洛谷 P3592
    首先不难发现最终答案中只会出现\(c_i\)中的数,所以可以将\(c_i\)离散化。设\(f_{i,j,k}\)表示区间\([l,r]\),最小值不小于\(k\)的最大收益,\(cnt_{i,j}\)表示区间......
  • 洛谷P1021题解
    原题P1021[NOIP1999提高组]邮票面值设计思路概述题意分析给定两个整数\(N,K(N+K≤15)\),设计\(K\)种邮票面值\(\{a_1,a_2\dotsa_K\}\),并用共\(N\)张上述邮票......
  • 洛谷P1064题解
    原题P1064[NOIP2006提高组]金明的预算方案思路概述题意分析给定一个体积为\(n\)的背包和\(m\)个物品。每个物品通过\((\text{价值},\text{体积})\)的形式表......
  • 洛谷 P7003
    考虑当左端点固定时,区间的\(\&\)和至多有\(\logw\)种,因为\(1\)的数量是单调不升的。所以我们可以枚举区间左端点\(i\),然后ST表预处理区间\(\&\)和+二分求出......
  • 洛谷P2512 [HAOI2008]糖果传递
    SLOJP1117.糖果传递题目描述有n个小朋友坐成一圈,每人有ai个糖果。每人只能给左右两人传递糖果。每人每次传递一个糖果代价为11。输入格式小朋友个数n,下面n行ai​......