一个不知道为什么报错的问题
  • 板块灌水区
  • 楼主Slient_QwQ
  • 当前回复7
  • 已保存回复7
  • 发布时间2023/11/18 22:21
  • 上次更新2023/11/19 08:51:04
查看原帖
一个不知道为什么报错的问题
963247
Slient_QwQ楼主2023/11/18 22:21

rt,下面这份代码不注释#define int long long就会报错,不知道为什么

/*Code By Manipula*/
#include <bits/stdc++.h>
// #pragma GCC optimize(2)
#define INF 0x3f3f3f3f
// #define int long long
#define swap(x, y) x ^= y ^= x ^= y
#define sqrt(n) pow(n, 0.5)
#define sort stable_sort
#define mk(x, y) make_pair(x, y)
#define mt(arr, num) memset(arr, num, sizeof(arr))
#define endl '\n'
using namespace std;
const int N = 1e6 + 5;
struct SegmentTree{
	int l, r, ls, rs, val;
}tr[N << 6];
int rt[N], val[N], n, T, tot;
int build(int p, int l, int r)
{
	p = ++tot;
	tr[p].l = l; tr[p].r = r;
	if (l == r){tr[p].val = val[l]; return p;}
	int mid = (l + r) >> 1;
	tr[p].ls = build(tr[p].ls, l, mid);
	tr[p].rs = build(tr[p].rs, mid + 1, r);
	return p;
}
int copy(int p){tr[++tot] = tr[p]; return tot;}
int update(int p, int x, int k)
{
	p = copy(p);
	if (tr[p].l == tr[p].r){tr[p].val = k; return p;}
	int mid = (tr[p].l + tr[p].r) >> 1;
	if (x <= mid)tr[p].ls = update(tr[p].ls, x, k);
	else tr[p].rs = update(tr[p].rs, x, k);
	return p;
}
int query(int p, int x)
{
	if (tr[p].l == tr[p].r)return tr[p].val;
	int mid = (tr[p].l + tr[p].r) >> 1;
	if (x <= mid)return query(tr[p].ls, x);
	else return query(tr[p].rs, x);
}
signed main()
{
	scanf("%d%d", &n, &T);
	rt[0] = 1;
	for (int i = 1; i <= n; i++)scanf("%d", &val[i]);
	build(1, 1, n);
	for (int i = 1; i <= T; i++)
	{
		int v, opt, x, k;
		scanf("%d%d%d", &v, &opt, &x);
		if (opt == 1)
		{
			scanf("%d", &k);
			rt[i] = update(rt[v], x, k);
		}
		else
		{
			printf("%d\n", query(rt[v], x));
			rt[i] = rt[v];
		}
	}
	return 0;
}
2023/11/18 22:21
加载中...