告诫后人
查看原帖
告诫后人
388651
5k_sync_closer楼主2022/6/7 18:28
  1. 不要用指针,指针会被卡空间。
#include <cstdio>
#define L long long
int n, l;L a, b;struct T{T *l, *r;int v, k;
T(int x, int y) : l(0), r(0), v(x), k(y) {}}*t, *s[10000050];
inline void R(int &r)
{
    r = 0;char c = getchar();
    while(c < '0' || c > '9') c = getchar();
    while(c >= '0' && c <= '9') r = r * 10 + c - '0', c = getchar();
}
void Q(T *x)
{
	a ^= 1ll * x->k * ((x->l ? x->l->k : 0) + 1);
	b ^= 1ll * x->k * ((x->r ? x->r->k : 0) + 1);
	if(x->l) Q(x->l);if(x->r) Q(x->r);
}
int main()
{
	R(n);for(int i = 1, v;i <= n;++i)
	{
		R(v);t = new T(v, i);
		while(l && v < s[l - 1]->v) t->l = s[--l];
		if(l) s[l - 1]->r = t;s[l++] = t;
	}
	return Q(s[0]), printf("%lld %lld", a, b), 0;
}

这样会 MLE#10。

2.结果开 ll,注意 [int] * [int] 可能爆 int,要写成 1ll * [int] * [int]

2022/6/7 18:28
加载中...