求助编译错误
查看原帖
求助编译错误
254315
Larry76楼主2023/4/12 15:56
#include <bits/stdc++.h>
using namespace std;
#define int long long
//namespace MODTool {
//	const int MOD = 1e9+7;
//	inline int ADD(int a,int b) {
//		return a+b>MOD?a+b-MOD:a+b;
//	}
//	inline int MUL(int a,int b) {
//		return (a%MOD * (b%MOD))%MOD;
//	}
//}
namespace Larry76 {
	inline int read() {
		int x=0,f=1;
		char ch = getchar();
		while(ch<'0'||ch>'9') {
			if(ch=='-')f=-1;
			ch=getchar();
		}
		while(ch>'0'&&ch<'9') {
			x=x*10+ch-48;
			ch=getchar();
		}
		return x*f;
	}
	const int INF = 0x7fffffffffffffffll;
	const int MAX_SIZE = 3e5;
	int head[MAX_SIZE];
	int Next[MAX_SIZE];
	int ver[MAX_SIZE];
	int tot;
	int n,k,m;
	void add(int u,int v) {
		ver[++tot] = v;
		Next[tot] = head[u];
		head[u] = tot;
	}
	struct SegmentTree {
		int max = INF;
		int ptr = INF;
	};
	SegmentTree min(const SegmentTree &a,const SegmentTree &b) {
		if(a.max == b.max) {
			return a.ptr < b.ptr ? a:b;
		}
		return a.max<b.max ? a:b;
	}
	SegmentTree seg[MAX_SIZE<<2];
	inline void pushup(int p) {
		seg[p] = min(seg[p<<1],seg[p<<1|1]);
	}
	void build(int p,int l,int r) {
		if(l==r) {
			seg[p].max = 0;
			seg[p].ptr = l;
			return ;
		}
		int mid = (l+r)>>1;
		build(p<<1,l,mid);
		build(p<<1|1,mid+1,r);
		pushup(p);
	}
	void update(int p,int l,int r,int x,int val) {
		if(l==r) {
			seg[p].max = val;
			return;
		}
		int mid = (l+r)>>1;
		if(x<=mid)
			update(p<<1,l,mid,x,val);
		else
			update(p<<1|1,mid+1,r,x,val);
		pushup(p);
	}
	SegmentTree query(int p,int tl,int tr,int l,int r) {
		if(l<=tl&&r>=tr)
			return seg[p];
		int mid = (tl+tr)>>1;
		SegmentTree val;
		if(l<=mid)
			val = min(val,query(p<<1,tl,mid,l,r));
		if(r>mid)
			val = min(val,query(p<<1|1,mid+1,tr,l,r));
		return val;
	}
	priority_queue <int> qwq[MAX_SIZE];
	int dfn[MAX_SIZE];
	int siz[MAX_SIZE];
	int rev[MAX_SIZE];
	int tim = 0;
	void dfs(int u,int fa) {
		dfn[u] = ++tim;
		rev[tim] = u;
		siz[u] = 1;
		for(int i=head[u]; i; i=Next[i]) {
			int v = ver[i];
			if(v==fa)
				continue;
			dfs(v,u);
			siz[u] += siz[v];
		}
	}
	int f[MAX_SIZE];
	void ddp(int u,int fa) {
		int v = 0;
		for(int i=head[u]; i; i=Next[i]) {
			v = ver[i];
			if(v==fa)
				continue;
			ddp(v,u);
		}
		update(1,1,tim,dfn[u],f[u]);
		priority_queue<int> buff = qwq[u];
		if(buff.empty())
			return;
		 
		f[u] = buff.top();
		update(1,1,tim,dfn[u],f[u]);
		buff.pop();

		if(siz[u]==1)
			return;
		while(!buff.empty()) {
			SegmentTree buffer = query(1,1,n,dfn[u]+1,dfn[u]+siz[u]-1);
			if(buffer.max>=buff.top())
				break;
			update(1, 1, n, buffer.ptr, buff.top());
			f[rev[buffer.ptr]] = buff.top();
			buff.pop();
		}
	}
	void main() {
		//Code Here
		int sid;
		cin>>sid;
		cin>>n>>k>>m;
		int fa;
		for(int i=2; i<=n; i++) {
			cin>>fa;
			add(i,fa);
			add(fa,i);
		}
		build(1,1,n);
		int x,v;
		for(int i=1; i<=k; i++) {
			cin>>x>>v;
			qwq[x].push(v);
		}
		dfs(1,1);
		ddp(1,1);
		int ans = 0;
		for(int i=1; i<=n; i++)
			ans += f[i];
		cout<<ans<<' ';
		while(m--){
			int opt,pos;
			cin>>opt>>pos;
			if(opt==2){
				cerr<<"QAQ Unhuiable"<<endl;
				cout<<ans<<' ';
			} else {
				int vv;
				cin>>vv;
				qwq[pos].push(vv);
				build(1,1,n);
				memset(f,0,sizeof f);
				ddp(1,1);
				ans = 0;
				for(int i=1; i<=n; i++)
					ans += f[i];
				cout<<ans<<' ';//warn
			}
		}
		return;
	}
}
signed main() {
//#ifndef LOCAL
//	freopen("transfer.in","r",stdin);
//	freopen("transfer.out","w",stdout);//File name !!
//#endif
	time_t t1 = clock();
	Larry76::main();
	time_t t2 = clock();
	cerr<<t2-t1<<endl;
	return (0^0);
}

如题,本地编译能过且程序正常运行,提交到本题上和洛谷在线 IDE 上全部 Compile Error,期间更换过 C++14(GCC 9)、C++14 和 C++20 全部报错,请求路过的大神们支援一下,在这里万分感谢

2023/4/12 15:56
加载中...