luoguAC,hduWA求调qwq
  • 板块P1531 I Hate It
  • 楼主CWzwz
  • 当前回复17
  • 已保存回复17
  • 发布时间2023/10/9 15:29
  • 上次更新2023/11/2 14:48:47
查看原帖
luoguAC,hduWA求调qwq
265204
CWzwz楼主2023/10/9 15:29
#include <iostream>
using namespace std;
const int N = 2e5 + 5;
typedef long long ll;
ll t[N << 2];
ll n, m, a[N], x, y;
char opt;
ll read(){ll x=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+(c^48);c=getchar();}return x*f;}
void print(ll x){if(x<0)putchar('-'),x=-x;if(x>9)print(x/10);putchar(x%10+48);}
char gc(){char c=getchar();while(c==' '||c=='\n')c=getchar();return c;}
void pushup(int u){
	t[u] = max(t[u << 1], t[u << 1 | 1]);
}
void build(int u,int l,int r){
	if(l == r){
		t[u] = a[l];
		return;
	}
	int mid = l + r >> 1;
	build(u << 1, l, mid);
	build(u << 1 | 1, mid + 1, r);
	pushup(u);
}
void upd(int u, int l, int r, int x, ll val){
	if(l == r){
		t[u] = max(t[u], val);
		return;
	}
	int mid = l + r >> 1;
	if(x <= mid){
		upd(u << 1, l, mid, x, val);
	} else {
		upd(u << 1 | 1, mid + 1, r, x, val);
	}
	pushup(u);
}
ll query(int u, int l, int r, int L, int R){
	if(L <= l && r <= R){
		return t[u];
	}
	int mid = l + r >> 1;
    ll cnt = 0;
	if(L <= mid) cnt = max(cnt, query(u << 1, l, mid, L, R));
	if(mid < R) cnt = max(cnt, query(u << 1 | 1, mid + 1, r, L, R));
	return cnt;
}
int main(){
	cin >> n >> m;
	for(int i = 1;i <= n;i++){
        a[i] = read();
	}
	build(1, 1, n);
	while(m--){
		opt = gc(), x = read(), y = read();
		if(opt == 'U'){
			upd(1, 1, n, x, y);
		} else {
			print(query(1, 1, n, x, y));
            puts("");
		}
	}
	return 0;
}
2023/10/9 15:29
加载中...