社区讨论

求助!爆零了,哪错了?

P2234[HNOI2002] 营业额统计参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lo8m0ixq
此快照首次捕获于
2023/10/27 20:48
2 年前
此快照最后确认于
2023/10/27 20:48
2 年前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
const int N = 4e4 + 5, NN = 2e6 + 10;
int n, a[N], mi = 1e7, mx = -1, l, s, xb;
struct node
{
	int pre, next, num;
}lb[NN];
int main()
{
	cin >> n;
	for(int i = 1; i <= n; i++)
	{
		cin >> a[i];
		lb[a[i] += 1000005].num++;
		mi = min(mi, a[i]);
		mx = max(mx, a[i]);
	}
	xb = mi;
	for(int i = mi + 1; i <= mx; i++)
	{
		if(lb[i].num == 0) continue;
		lb[l].next = i;
		lb[i].pre = xb;
		xb = i;
	}
	for(int i = n; i >= 2; i--)
	{
		if(lb[a[i]].num > 1) lb[a[i]].num--;
		else
		{
			int l = lb[a[i]].pre;
			int r = lb[a[i]].next;
			if(l == 0) s += r - a[i];
			else if(r == 0) s += a[i]- l;
	    	else s += min(a[i] - l, r - a[i]);
			lb[l].next = r;
			lb[r].pre = l;
		}
	}
	cout << s << endl;
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...