Submission #71850898


Source Code Expand

#include <bits/stdc++.h>

using namespace std;

const int N = 3e5 + 10, P = 998244353;

#define int long long

int n, q;
int x[N], y[N];

struct Tree {
	struct Node {
		int l, r;
		int v0, v1, v2, v3;
	}tr[N << 2];
	
	void pushup(int u) {
		tr[u].v0 = max(tr[u << 1].v0, tr[u << 1 | 1].v0);
		tr[u].v1 = max(tr[u << 1].v1, tr[u << 1 | 1].v1);
		tr[u].v2 = max(tr[u << 1].v2, tr[u << 1 | 1].v2);
		tr[u].v3 = max(tr[u << 1].v3, tr[u << 1 | 1].v3);
	}
	
	void build(int u = 1, int l = 1, int r = n) {
		tr[u].l = l, tr[u].r = r;
		if (l == r) {
			tr[u].v0 = x[l] + y[l];
			tr[u].v1 = x[l] - y[l];
			tr[u].v2 = -x[l] + y[l];
			tr[u].v3 = -x[l] - y[l];
		} else {
			int mid = l + r >> 1;
			build(u << 1, l, mid), build(u << 1 | 1, mid + 1, r);
			pushup(u);
		}
	}
	
	void modify(int u, int l) {
		if (tr[u].l == tr[u].r) {
			tr[u].v0 = x[l] + y[l];
			tr[u].v1 = x[l] - y[l];
			tr[u].v2 = -x[l] + y[l];
			tr[u].v3 = -x[l] - y[l];
		} else {
			int mid = tr[u].l + tr[u].r >> 1;
			if (l <= mid) modify(u << 1, l);
			else modify(u << 1 | 1, l);
			pushup(u);
		}
	}
	
	int query0(int u, int l, int r) {
		if (tr[u].l >= l && tr[u].r <= r) return tr[u].v0;
		int mid = tr[u].l + tr[u].r >> 1, res = -1e18;
		if (l <= mid) res = query0(u << 1, l, r);
		if (r > mid) res = max(res, query0(u << 1 | 1, l, r));
		return res;
	}
	
	int query1(int u, int l, int r) {
		if (tr[u].l >= l && tr[u].r <= r) return tr[u].v1;
		int mid = tr[u].l + tr[u].r >> 1, res = -1e18;
		if (l <= mid) res = query1(u << 1, l, r);
		if (r > mid) res = max(res, query1(u << 1 | 1, l, r));
		return res;
	}
	
	int query2(int u, int l, int r) {
		if (tr[u].l >= l && tr[u].r <= r) return tr[u].v2;
		int mid = tr[u].l + tr[u].r >> 1, res = -1e18;
		if (l <= mid) res = query2(u << 1, l, r);
		if (r > mid) res = max(res, query2(u << 1 | 1, l, r));
		return res;
	}
	
	int query3(int u, int l, int r) {
		if (tr[u].l >= l && tr[u].r <= r) return tr[u].v3;
		int mid = tr[u].l + tr[u].r >> 1, res = -1e18;
		if (l <= mid) res = query3(u << 1, l, r);
		if (r > mid) res = max(res, query3(u << 1 | 1, l, r));
		return res;
	}
}T;

signed main() {
	cin >> n >> q;
	for (int i = 1; i <= n; ++ i ) {
		cin >> x[i] >> y[i];
	}
	T.build();
	while (q -- ) {
		int op, x, y;
		cin >> op;
		if (op == 1) {
			int i;
			cin >> i >> x >> y;
			::x[i] = x, ::y[i] = y;
			T.modify(1, i);
		} else {
			int l, r;
			cin >> l >> r >> x >> y;
			int v0 = T.query0(1, l, r);
			int v1 = T.query1(1, l, r);
			int v2 = T.query2(1, l, r);
			int v3 = T.query3(1, l, r);
			cout << max({
				v0 - x - y,
				v1 - x + y,
				v2 + x - y,
				v3 + x + y
			}) << '\n';
		}
	}
	return 0;
}

Submission Info

Submission Time
Task F - Manhattan Christmas Tree 2
User huk2
Language C++23 (GCC 15.2.0)
Score 500
Code Size 2756 Byte
Status AC
Exec Time 729 ms
Memory 31444 KiB

Compile Error

./Main.cpp: In member function 'void Tree::build(long long int, long long int, long long int)':
./Main.cpp:33:37: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   33 |                         int mid = l + r >> 1;
      |                                   ~~^~~
./Main.cpp: In member function 'void Tree::modify(long long int, long long int)':
./Main.cpp:46:43: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   46 |                         int mid = tr[u].l + tr[u].r >> 1;
      |                                   ~~~~~~~~^~~~~~~~~
./Main.cpp: In member function 'long long int Tree::query0(long long int, long long int, long long int)':
./Main.cpp:55:35: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   55 |                 int mid = tr[u].l + tr[u].r >> 1, res = -1e18;
      |                           ~~~~~~~~^~~~~~~~~
./Main.cpp: In member function 'long long int Tree::query1(long long int, long long int, long long int)':
./Main.cpp:63:35: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   63 |                 int mid = tr[u].l + tr[u].r >> 1, res = -1e18;
      |                           ~~~~~~~~^~~~~~~~~
./Main.cpp: In member function 'long long int Tree::query2(long long int, long long int, long long int)':
./Main.cpp:71:35: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   71 |                 int mid = tr[u].l + tr[u].r >> 1, res = -1e18;
      |                           ~~~~~~~~^~~~~~~~~
./Main.cpp: In member function 'long long int Tree::query3(long long int, long long int, long long int)':
./Main.cpp:79:35: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   79 |                 int mid = tr[u].l + tr[u].r >> 1, res = -1e18;
      |                           ~~~~~~~~^~~~~~~~~

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 500 / 500
Status
AC × 2
AC × 24
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt
All 00_sample_00.txt, 00_sample_01.txt, 01_random_00.txt, 01_random_01.txt, 01_random_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 01_random_10.txt, 01_random_11.txt, 01_random_12.txt, 01_random_13.txt, 01_random_14.txt, 01_random_15.txt, 01_random_16.txt, 01_random_17.txt, 01_random_18.txt, 01_random_19.txt, 01_random_20.txt, 01_random_21.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 2 ms 3464 KiB
00_sample_01.txt AC 2 ms 3464 KiB
01_random_00.txt AC 608 ms 31304 KiB
01_random_01.txt AC 647 ms 31344 KiB
01_random_02.txt AC 680 ms 31240 KiB
01_random_03.txt AC 693 ms 31196 KiB
01_random_04.txt AC 704 ms 31360 KiB
01_random_05.txt AC 711 ms 31168 KiB
01_random_06.txt AC 719 ms 31356 KiB
01_random_07.txt AC 724 ms 31240 KiB
01_random_08.txt AC 726 ms 31152 KiB
01_random_09.txt AC 729 ms 31444 KiB
01_random_10.txt AC 556 ms 31144 KiB
01_random_11.txt AC 557 ms 31444 KiB
01_random_12.txt AC 556 ms 31404 KiB
01_random_13.txt AC 555 ms 31148 KiB
01_random_14.txt AC 555 ms 31144 KiB
01_random_15.txt AC 263 ms 3628 KiB
01_random_16.txt AC 423 ms 31196 KiB
01_random_17.txt AC 460 ms 31144 KiB
01_random_18.txt AC 453 ms 31148 KiB
01_random_19.txt AC 449 ms 31356 KiB
01_random_20.txt AC 445 ms 31444 KiB
01_random_21.txt AC 441 ms 31152 KiB