Submission #71645179


Source Code Expand

#include <bits/stdc++.h>

#define rep(i, s, e) for(int (i) = (s); (i) <= (e); ++(i))
#define _rep(i, s, e) for(int (i) = (s); (i) >= (e); --(i))
#define fep(i, s, e) for(int (i) = (s); (i) < (e); ++(i))
#define _fep(i, s, e) for(int (i) = (s); (i) > (e); --(i))

// #define int long long
#define pii pair<int, int>

using namespace std;

constexpr int inf = numeric_limits<int>::max() / 2;
constexpr int ninf = numeric_limits<int>::min() / 2;
constexpr int mod = 998244353;
constexpr double eps = 1e-9;

int n, q, val[2][19][2];

struct Segtree {
	int tr[(1 << 20) + 5], mn[(1 << 20) + 5];
	void build(int l, int r, int p) {
		if(l == r) {
			mn[p] = tr[p];
			mn[p << 1] = inf;
			mn[p << 1 | 1] = inf;
			return;
		}
		int mid = (l + r) >> 1;
		build(l, mid, p << 1);
		build(mid + 1, r, p << 1 | 1);
		mn[p] = min(tr[p], mn[p << 1] + mn[p << 1 | 1]);
		return;
	}
	void update(int p, int d) {
		tr[p] = d;
		while(p) {
			mn[p] = min(tr[p], mn[p << 1] + mn[p << 1 | 1]);
			p >>= 1;
		}
		return;
	}
} tr;

void calc(int &x, int op) {
	if(x == (1 << n)) {
		x += (1 << n) - 1;
		val[op][0][0] = tr.mn[x];
		val[op][0][1] = 0;
	} else {
		x += (1 << n);
		val[op][0][0] = 0;
		val[op][0][1] = tr.mn[x];
	}
	int cur = x;
	rep(i, 1, n) {
		if(cur & 1) {
			val[op][i][0] = min(val[op][i - 1][0] + tr.mn[cur ^ 1], val[op][i - 1][1] + tr.mn[cur >> 1]);
			val[op][i][1] = val[op][i - 1][1];
		} else {
			val[op][i][0] = val[op][i - 1][0];
			val[op][i][1] = min(val[op][i - 1][1] + tr.mn[cur ^ 1], val[op][i - 1][0] + tr.mn[cur >> 1]);
		}
		cur >>= 1;
		val[op][i][0] = min(val[op][i][0], val[op][i][1] + tr.mn[cur]);
		val[op][i][1] = min(val[op][i][1], val[op][i][0] + tr.mn[cur]);
	}
	return;
}

void solve() {
	cin >> n;
	fep(i, 1, 1 << (n + 1)) {
		cin >> tr.tr[i];
	}
	tr.build(1, 1 << n, 1);
	cin >> q;
	while(q--) {
		int op, x, y, ans = inf;
		cin >> op >> x >> y;
		if(op == 1) {
			tr.update(x, y);
		} else {
			calc(x, 0);
			calc(y, 1);
			rep(i, 0, n) {
				if(x == y) {
					ans = min(ans, val[0][i][0] + val[1][i][0]);
					ans = min(ans, val[0][i][1] + val[1][i][1]);
				} else if(x + 1 == y) {
					ans = min(ans, val[0][i][1] + val[1][i][0]);
				} else if(y + 1 == x) {
					ans = min(ans, val[1][i][1] + val[0][i][0]);
				}
				x >>= 1;
				y >>= 1;
			}
			cout << ans << '\n';
		}
	}
	return;
}

signed main() {
//	freopen("bumper.in", "r", stdin);
//	freopen("bumper.out", "w", stdout);
	ios::sync_with_stdio(0);
	cin.tie(0), cout.tie(0);
	int T = 1;
	while(T--) solve();
	return 0;
}

Submission Info

Submission Time
Task C - Segment Tree
User Getaway_Car
Language C++ 23 (gcc 12.2)
Score 100
Code Size 2622 Byte
Status AC
Exec Time 108 ms
Memory 9812 KiB

Compile Error

Main.cpp: In function ‘void calc(int&, int)’:
Main.cpp:3:30: warning: unnecessary parentheses in declaration of ‘i’ [-Wparentheses]
    3 | #define rep(i, s, e) for(int (i) = (s); (i) <= (e); ++(i))
      |                              ^~~
Main.cpp:56:9: note: in expansion of macro ‘rep’
   56 |         rep(i, 1, n) {
      |         ^~~
Main.cpp:3:30: note: remove parentheses
    3 | #define rep(i, s, e) for(int (i) = (s); (i) <= (e); ++(i))
      |                              ^~~
Main.cpp:56:9: note: in expansion of macro ‘rep’
   56 |         rep(i, 1, n) {
      |         ^~~
Main.cpp: In function ‘void solve()’:
Main.cpp:5:30: warning: unnecessary parentheses in declaration of ‘i’ [-Wparentheses]
    5 | #define fep(i, s, e) for(int (i) = (s); (i) < (e); ++(i))
      |                              ^~~
Main.cpp:73:9: note: in expansion of macro ‘fep’
   73 |         fep(i, 1, 1 << (n + 1)) {
      |         ^~~
Main.cpp:5:30: note: remove parentheses
    5 | #define fep(i, s, e) for(int (i) = (s); (i) < (e); ++(i))
      |                              ^~~
Main.cpp:73:9: note: in expansion of macro ‘fep’
   73 |         fep(i, 1, 1 << (n + 1)) {
      |         ^~~
Main.cpp:3:30: warning: unnecessary parentheses in declaration of ‘i’ [-Wparentheses]
    3 | #define rep(i, s, e) for(int (i) = (s); (i) <= (e); ++(i))
      |                              ^~~
Main.cpp:86:25: note: in expansion of macro ‘rep’
   86 |                         rep(i, 0, n) {
      |                         ^~~
Main.cpp:3:30: note: remove parentheses
    3 | #define rep(i, s, e) for(int (i) = (s); (i) <= (e); ++(i))
      |                              ^~~
Main.cpp:86:25: note: in expansion of macro ‘rep’
   86 |                         rep(i, 0, n) {
      |                         ^~~

Judge Result

Set Name Sample Small All
Score / Max Score 0 / 0 30 / 30 70 / 70
Status
AC × 1
AC × 27
AC × 67
Set Name Test Cases
Sample sample01.txt
Small partial-02-case01-03.txt, partial-02-case01-04.txt, partial-02-case01-08.txt, partial-02-case01-09.txt, partial-02-case01-13.txt, partial-02-case01-14.txt, partial-02-case02-18.txt, partial-02-case02-19.txt, partial-02-case02-23.txt, partial-02-case02-24.txt, partial-02-case03-28.txt, partial-02-case03-29.txt, partial-02-case03-33.txt, partial-02-case03-34.txt, partial-02-case04-38.txt, partial-02-case04-39.txt, partial-02-case04-43.txt, partial-02-case04-44.txt, partial-02-case05-48.txt, partial-02-case05-49.txt, partial-02-case05-53.txt, partial-02-case05-54.txt, partial-02-case05-58.txt, partial-02-case05-59.txt, partial-03-case01-63.txt, partial-03-case01-64.txt, partial-03-case01-65.txt
All all-02-case01-00.txt, all-02-case01-01.txt, all-02-case01-02.txt, all-02-case01-05.txt, all-02-case01-06.txt, all-02-case01-07.txt, all-02-case01-10.txt, all-02-case01-11.txt, all-02-case01-12.txt, all-02-case02-15.txt, all-02-case02-16.txt, all-02-case02-17.txt, all-02-case02-20.txt, all-02-case02-21.txt, all-02-case02-22.txt, all-02-case03-25.txt, all-02-case03-26.txt, all-02-case03-27.txt, all-02-case03-30.txt, all-02-case03-31.txt, all-02-case03-32.txt, all-02-case04-35.txt, all-02-case04-36.txt, all-02-case04-37.txt, all-02-case04-40.txt, all-02-case04-41.txt, all-02-case04-42.txt, all-02-case05-45.txt, all-02-case05-46.txt, all-02-case05-47.txt, all-02-case05-50.txt, all-02-case05-51.txt, all-02-case05-52.txt, all-02-case05-55.txt, all-02-case05-56.txt, all-02-case05-57.txt, all-03-case01-60.txt, all-03-case01-61.txt, all-03-case01-62.txt, partial-02-case01-03.txt, partial-02-case01-04.txt, partial-02-case01-08.txt, partial-02-case01-09.txt, partial-02-case01-13.txt, partial-02-case01-14.txt, partial-02-case02-18.txt, partial-02-case02-19.txt, partial-02-case02-23.txt, partial-02-case02-24.txt, partial-02-case03-28.txt, partial-02-case03-29.txt, partial-02-case03-33.txt, partial-02-case03-34.txt, partial-02-case04-38.txt, partial-02-case04-39.txt, partial-02-case04-43.txt, partial-02-case04-44.txt, partial-02-case05-48.txt, partial-02-case05-49.txt, partial-02-case05-53.txt, partial-02-case05-54.txt, partial-02-case05-58.txt, partial-02-case05-59.txt, partial-03-case01-63.txt, partial-03-case01-64.txt, partial-03-case01-65.txt, sample01.txt
Case Name Status Exec Time Memory
all-02-case01-00.txt AC 21 ms 3484 KiB
all-02-case01-01.txt AC 23 ms 3600 KiB
all-02-case01-02.txt AC 27 ms 3448 KiB
all-02-case01-05.txt AC 22 ms 3416 KiB
all-02-case01-06.txt AC 24 ms 3480 KiB
all-02-case01-07.txt AC 29 ms 3532 KiB
all-02-case01-10.txt AC 23 ms 3672 KiB
all-02-case01-11.txt AC 25 ms 3540 KiB
all-02-case01-12.txt AC 31 ms 3536 KiB
all-02-case02-15.txt AC 25 ms 3548 KiB
all-02-case02-16.txt AC 28 ms 3544 KiB
all-02-case02-17.txt AC 34 ms 3620 KiB
all-02-case02-20.txt AC 24 ms 3480 KiB
all-02-case02-21.txt AC 29 ms 3416 KiB
all-02-case02-22.txt AC 39 ms 3540 KiB
all-02-case03-25.txt AC 29 ms 3668 KiB
all-02-case03-26.txt AC 33 ms 3548 KiB
all-02-case03-27.txt AC 43 ms 3692 KiB
all-02-case03-30.txt AC 27 ms 3580 KiB
all-02-case03-31.txt AC 32 ms 3492 KiB
all-02-case03-32.txt AC 45 ms 3584 KiB
all-02-case04-35.txt AC 33 ms 4224 KiB
all-02-case04-36.txt AC 46 ms 4924 KiB
all-02-case04-37.txt AC 69 ms 6520 KiB
all-02-case04-40.txt AC 48 ms 6612 KiB
all-02-case04-41.txt AC 45 ms 5044 KiB
all-02-case04-42.txt AC 54 ms 4392 KiB
all-02-case05-45.txt AC 62 ms 9692 KiB
all-02-case05-46.txt AC 69 ms 9684 KiB
all-02-case05-47.txt AC 84 ms 9664 KiB
all-02-case05-50.txt AC 64 ms 9688 KiB
all-02-case05-51.txt AC 73 ms 9620 KiB
all-02-case05-52.txt AC 87 ms 9624 KiB
all-02-case05-55.txt AC 66 ms 9648 KiB
all-02-case05-56.txt AC 75 ms 9692 KiB
all-02-case05-57.txt AC 88 ms 9584 KiB
all-03-case01-60.txt AC 90 ms 9620 KiB
all-03-case01-61.txt AC 73 ms 9596 KiB
all-03-case01-62.txt AC 77 ms 9812 KiB
partial-02-case01-03.txt AC 31 ms 3536 KiB
partial-02-case01-04.txt AC 31 ms 3456 KiB
partial-02-case01-08.txt AC 33 ms 3484 KiB
partial-02-case01-09.txt AC 33 ms 3412 KiB
partial-02-case01-13.txt AC 35 ms 3548 KiB
partial-02-case01-14.txt AC 35 ms 3456 KiB
partial-02-case02-18.txt AC 44 ms 3460 KiB
partial-02-case02-19.txt AC 51 ms 3528 KiB
partial-02-case02-23.txt AC 48 ms 3412 KiB
partial-02-case02-24.txt AC 39 ms 3620 KiB
partial-02-case03-28.txt AC 64 ms 3692 KiB
partial-02-case03-29.txt AC 65 ms 3732 KiB
partial-02-case03-33.txt AC 64 ms 3512 KiB
partial-02-case03-34.txt AC 64 ms 3576 KiB
partial-02-case04-38.txt AC 89 ms 6544 KiB
partial-02-case04-39.txt AC 87 ms 6620 KiB
partial-02-case04-43.txt AC 72 ms 4320 KiB
partial-02-case04-44.txt AC 77 ms 5040 KiB
partial-02-case05-48.txt AC 108 ms 9732 KiB
partial-02-case05-49.txt AC 106 ms 9552 KiB
partial-02-case05-53.txt AC 105 ms 9584 KiB
partial-02-case05-54.txt AC 103 ms 9760 KiB
partial-02-case05-58.txt AC 106 ms 9656 KiB
partial-02-case05-59.txt AC 103 ms 9580 KiB
partial-03-case01-63.txt AC 106 ms 9692 KiB
partial-03-case01-64.txt AC 92 ms 9676 KiB
partial-03-case01-65.txt AC 94 ms 9620 KiB
sample01.txt AC 1 ms 3556 KiB