求救RE+MLE,样例过了,感谢
查看原帖
求救RE+MLE,样例过了,感谢
956071
Xiongzx楼主2023/3/22 22:36
#include <bits/stdc++.h>

#define rep(i, a, b) for(int i = (a); i <= (b); i++)
#define pre(i, a, b) for(int i = (a); i >= (b); i--)
#define Ede(i, u) for(int i = h[u]; i; i = ne[i])
#define go(i, a) for(auto i : a)
//#define int long long
#define LL long long
#define ULL unsigned long long
#define PII pair<int, int>
#define PIL pair<int, long long>
#define PLI pair<long long, int>
#define PLL pair<long long, long long>
#define mp make_pair
#define eb emplace_back
#define pb push_back
#define pf push_front
#define fi first
#define se second
#define sf scanf
#define prf printf
#define el putchar('\n')
#define mms(arr, n) memset(arr, n, sizeof(arr))
#define mmc(arr1, arr2) memcpy(arr1, arr2, sizeof(arr2))
const int inf = 0x3f3f3f3f;

template <typename T> inline void rd(T &x){
	x = 0; bool f = true; char ch = getchar();
	while(ch < '0' || ch > '9'){ if(ch == '-') f = false; ch = getchar();}
	while(ch >= '0' && ch <= '9'){ x = (x << 1) + (x << 3) + (ch ^ '0'); ch = getchar();}
	if(!f) x = -x;
}
template <typename T, typename ...Args> inline void rd(T &x, Args &...args){ rd(x); rd(args...);}
#define ls(x) tr[x].l
#define rs(x) tr[x].r
using namespace std;

const int N = 1e6 + 10;
struct Node{
	int l, r;
	int val;
}tr[25 * N];
int n, m, a[N];

int root[N]/*每次操作的根*/, idx/*为节点编号*/;
void build(int &x, int l, int r){
	x = ++idx;
	if(l == r){
		tr[x].val = a[l];
		return;
	}
	int mid = (l + r) >> 1;
	build(ls(x), l, mid);
	build(rs(x), mid + 1, r);
}
void modify(int &x, int y/*在谁的基础上*/, int l, int r, int pos, int v){
	x = ++idx;
	tr[x] = tr[y];
	if(l == r){
		tr[x].val = v;
		return;
	}
	int mid = (l + r) >> 1;
	if(pos <= mid) modify(ls(x), ls(y), l, mid, pos, v);
	else modify(rs(x), rs(y), mid + 1, r, pos, v);
}
int query(int x, int l, int r, int pos){
	if(l == r) return tr[x].val;
	int mid = (l + r) >> 1;
	if(pos <= mid) query(ls(x), l, mid, pos);
	else query(rs(x), mid + 1, r, pos);
}


int main(){
	/*
	freopen(".in", "r", stdin);
	freopen(".out", "w", stdout);
	*/
	rd(n, m);
	rep(i, 1, n) rd(a[i]);
	build(root[0], 1, n);
	rep(i, 1, m){
		int cre, ins, loc, val;
		rd(cre, ins, loc);
		if(ins == 1){
			rd(val);
			modify(root[i], root[cre], 1, n, loc, val);
		}else{
			int ans = query(root[cre], 1, n, loc);
			root[i] = root[cre];
			prf("%d\n", ans);
		}
	}

	return 0;
}





2023/3/22 22:36
加载中...