神奇错误!
查看原帖
神奇错误!
416192
kbzcz楼主2023/9/15 20:51

我代码内存开 1e6_10 过了,开2e6+5 过不了,是什么原因啊?调了我1小时。


AC代码:

#include <bits/stdc++.h>
#define int long long
#define val first
#define id second
using namespace std;
typedef pair<int,int> PII;
const int N=1e6+10; //就这!
int n,m;
struct node {
	int l,r,val;
}a[N];
int tot,cnt,sum;
bool vis[N];
priority_queue<PII,vector<PII>,greater<PII> > q;
signed main() {
	scanf("%lld%lld",&n,&m);
	int f=-1;
	for(int i=1;i<=n;i++) {
		int x;
		scanf("%lld",&x);
		if((x>0)!=f) {
			a[++tot].val+=x;
			f=(x>0);
		}
		else a[tot].val+=x;
	}
	for(int i=1;i<=tot;i++) {
		a[i].l=i-1;
		a[i].r=i+1;
		if(a[i].val>0) sum+=a[i].val,cnt++;
		q.push({abs(a[i].val),i});
	}
	if(cnt<=m) {
		printf("%lld",sum);
		return 0;
	}
	a[0].l=-1;a[0].r=1;
	a[tot+1].l=tot;a[tot+1].r=tot+2;
	while(!q.empty()&&cnt>m) {
		auto h=q.top();
		q.pop();
		if(vis[h.id]) continue;
		if(a[h.id].val>0||(a[h.id].l>0&&a[h.id].r<tot+1)) {
			sum-=h.val;
			a[h.id].val+=a[a[h.id].l].val+a[a[h.id].r].val;
			vis[a[h.id].l]=vis[a[h.id].r]=1;
			a[h.id].l=a[a[h.id].l].l;
			a[h.id].r=a[a[h.id].r].r;
			a[a[h.id].r].l=h.id;
			a[a[h.id].l].r=h.id;
			q.push({abs(a[h.id].val),h.id});
			cnt--; 
		}
	}
	printf("%lld",sum);
	return 0;
}

记录


WA代码:

#include <bits/stdc++.h>
#define int long long
#define val first
#define id second
using namespace std;
typedef pair<int,int> PII;
const int N=2e6+5; //就这!
int n,m;
struct node {
	int l,r,val;
}a[N];
int tot,cnt,sum;
bool vis[N];
priority_queue<PII,vector<PII>,greater<PII> > q;
signed main() {
	scanf("%lld%lld",&n,&m);
	int f=-1;
	for(int i=1;i<=n;i++) {
		int x;
		scanf("%lld",&x);
		if((x>0)!=f) {
			a[++tot].val+=x;
			f=(x>0);
		}
		else a[tot].val+=x;
	}
	for(int i=1;i<=tot;i++) {
		a[i].l=i-1;
		a[i].r=i+1;
		if(a[i].val>0) sum+=a[i].val,cnt++;
		q.push({abs(a[i].val),i});
	}
	if(cnt<=m) {
		printf("%lld",sum);
		return 0;
	}
	a[0].l=-1;a[0].r=1;
	a[tot+1].l=tot;a[tot+1].r=tot+2;
	while(!q.empty()&&cnt>m) {
		auto h=q.top();
		q.pop();
		if(vis[h.id]) continue;
		if(a[h.id].val>0||(a[h.id].l>0&&a[h.id].r<tot+1)) {
			sum-=h.val;
			a[h.id].val+=a[a[h.id].l].val+a[a[h.id].r].val;
			vis[a[h.id].l]=vis[a[h.id].r]=1;
			a[h.id].l=a[a[h.id].l].l;
			a[h.id].r=a[a[h.id].r].r;
			a[a[h.id].r].l=h.id;
			a[a[h.id].l].r=h.id;
			q.push({abs(a[h.id].val),h.id});
			cnt--; 
		}
	}
	printf("%lld",sum);
	return 0;
}

记录

2023/9/15 20:51
加载中...