提出 #74871997
ソースコード 拡げる
#include <bits/stdc++.h>
#define fastio cin.tie(0)->sync_with_stdio(0)
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
#define compress(v) sort(all(v)), v.erase(unique(all(v)), v.end())
#define sz(x) (int)(x).size()
using namespace std;
typedef long long ll;
template<typename Node, typename F> struct SegTree {
int n, size;
Node e; // 항등원
vector<Node> tree;
F func;
SegTree(int n, const Node& e, F func) : n(n), size(1<<(__lg(n)+1)), e(e), tree(size<<1, e), func(func) {}
SegTree(const vector<Node>& v, const Node& e, F func) : n(sz(v)), size(1<<(__lg(n)+1)), e(e), tree(size<<1, e), func(func) {
for (int i = 0; i < n; i++) tree[i+size] = v[i];
for (int i = size-1; i > 0; i--) tree[i] = func(tree[i<<1], tree[i<<1 | 1]);
}
void update(int i, const Node& val) {
tree[i += size] = val;
while (i >>= 1) {
tree[i] = func(tree[i<<1], tree[i<<1 | 1]);
}
}
Node query(int i) { return tree[i + size]; }
Node query(int l, int r) {
Node L = e, R = e;
for (l += size, r += size; l <= r; l >>= 1, r >>= 1) {
if (l & 1) L = func(L, tree[l++]);
if (~r & 1) R = func(tree[r--], R);
}
return func(L, R);
}
};
int main() {
fastio; int N, M, Q; cin >> N >> M >> Q;
vector<int> ver(N+1); int vc = 0;
vector<vector<array<int,3>>> adj(Q+1), qv(Q+1);
int q = 0;
for (int i = 0; i < Q; i++) {
int a, x, y; cin >> a >> x >> y;
if (a == 1) {
ver[x] = ver[y];
}
else if (a == 2) {
int z; cin >> z;
adj[ver[x]].push_back({ ++vc, y, z });
ver[x] = vc;
}
else {
int z; cin >> z;
qv[ver[x]].push_back({ q++, y, z });
}
}
vector<ll> ans(q);
SegTree sg(M, (ll)0, [](ll a, ll b) { return a+b; });
auto dfs = [&](auto dfs, int u) -> void {
for (auto [id, l, r] : qv[u]) {
ans[id] = sg.query(l, r);
}
for (auto [v, y, z] : adj[u]) {
ll t = sg.query(y);
sg.update(y, z);
dfs(dfs, v);
sg.update(y, t);
}
};
dfs(dfs, 0);
for (auto i : ans) cout << i << "\n";
return 0;
}
提出情報
| 提出日時 |
|
| 問題 |
G - Copy Query |
| ユーザ |
Lov34ever |
| 言語 |
C++23 (GCC 15.2.0) |
| 得点 |
600 |
| コード長 |
2368 Byte |
| 結果 |
AC |
| 実行時間 |
80 ms |
| メモリ |
48872 KiB |
ジャッジ結果
| セット名 |
Sample |
All |
| 得点 / 配点 |
0 / 0 |
600 / 600 |
| 結果 |
|
|
| セット名 |
テストケース |
| Sample |
sample_01.txt |
| All |
evil_01.txt, evil_02.txt, evil_03.txt, evil_04.txt, evil_05.txt, sample_01.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt |
| ケース名 |
結果 |
実行時間 |
メモリ |
| evil_01.txt |
AC |
63 ms |
29892 KiB |
| evil_02.txt |
AC |
62 ms |
31348 KiB |
| evil_03.txt |
AC |
65 ms |
31432 KiB |
| evil_04.txt |
AC |
67 ms |
31380 KiB |
| evil_05.txt |
AC |
80 ms |
31384 KiB |
| sample_01.txt |
AC |
1 ms |
3432 KiB |
| test_01.txt |
AC |
1 ms |
3528 KiB |
| test_02.txt |
AC |
1 ms |
3596 KiB |
| test_03.txt |
AC |
1 ms |
3496 KiB |
| test_04.txt |
AC |
39 ms |
24996 KiB |
| test_05.txt |
AC |
42 ms |
16624 KiB |
| test_06.txt |
AC |
43 ms |
16592 KiB |
| test_07.txt |
AC |
51 ms |
16232 KiB |
| test_08.txt |
AC |
51 ms |
16092 KiB |
| test_09.txt |
AC |
56 ms |
16340 KiB |
| test_10.txt |
AC |
58 ms |
16344 KiB |
| test_11.txt |
AC |
58 ms |
20064 KiB |
| test_12.txt |
AC |
58 ms |
20056 KiB |
| test_13.txt |
AC |
58 ms |
20048 KiB |
| test_14.txt |
AC |
56 ms |
17816 KiB |
| test_15.txt |
AC |
58 ms |
19860 KiB |
| test_16.txt |
AC |
62 ms |
48872 KiB |
| test_17.txt |
AC |
57 ms |
29084 KiB |
| test_18.txt |
AC |
57 ms |
29512 KiB |
| test_19.txt |
AC |
51 ms |
28652 KiB |
| test_20.txt |
AC |
57 ms |
29136 KiB |