P1531 线段树模板求调!
  • 板块学术版
  • 楼主LonginusMonkey
  • 当前回复3
  • 已保存回复3
  • 发布时间2022/8/2 11:09
  • 上次更新2023/10/27 17:24:22
查看原帖
P1531 线段树模板求调!
326254
LonginusMonkey楼主2022/8/2 11:09

蒟蒻只有50pt

代码巨丑,勿喷

#include<bits/stdc++.h>
#define int long long
using namespace std;
int arr[200010];
struct node{
	int l, r, data;
};
node tree[200010<<2+100000];
void build(int l,int r,int index){
	if(l == r) {
		tree[index].data = arr[l];
		tree[index].l = tree[index].r = l;
		return;
	}
	int mid = l + r >> 1;
	build(l,mid,index*2);
	build(mid+1,r,index*2+1);
	tree[index].l = l;
	tree[index].r = r;
	tree[index].data = max(tree[index*2].data, tree[index*2+1].data);
}
void q(int a, int b, int index) {
	if(tree[index].l > a || tree[index].r < a) {
		return;
	}
	if(tree[index].l == a && tree[index].l == tree[index].r) {
		tree[index].data = b;
		return;
	}
	q(a,b,index*2);
	q(a,b,index*2+1);
	tree[index].data = max(tree[index*2].data, tree[index*2+1].data);
}
int ask(int a, int b, int index) {
	if(b >= tree[index].r && a<=tree[index].l) {
		return tree[index].data;
	}
	if(b < tree[index].l || a > tree[index].r) {
		return 0;
	}
	return max(ask(a,b,index*2), ask(a,b,index*2+1));
}
signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	int n, m;
	cin >> n >> m;
	for(int i=1; i<=n; ++i) {
		cin >> arr[i];
	}
	build(1,n,1);
	for(int i=1; i<=m; ++i) {
		char bl;
		cin >> bl;
		int a, b;
		cin >> a >> b;
		if(bl == 'Q') {
			cout << ask(a,b,1) << endl;
		}
		else
		{
			q(a,b,1);
		}
	}
	return 0;
}
2022/8/2 11:09
加载中...