답안 #930132

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
930132 2024-02-18T16:07:51 Z duckindog Klasika (COCI20_klasika) C++14
33 / 110
1197 ms 524288 KB
#include<bits/stdc++.h>

using namespace std;

using pii = pair<int, int>;
const int N = 3e5 + 10;
int n;
struct Query {
  int a, t;
  Query(int a = 0, int t = 0) : a(a), t(t) {}
};
vector<Query> Q[N];

struct trie {
  int maxBit = 30;
  int it;
  vector<vector<int>> nwt;
  vector<int> t;

  set<int> S;
  map<int, int> tick;
  void add(int val, int time) {
    S.insert(val);
    if (!tick[val] || tick[val] > time) tick[val] = time;

    int g = 0;
    for (int j = maxBit; j >= 1; --j) {
      int bit = (val >> j - 1 & 1);

      while (nwt.size() <= g) nwt.push_back(vector<int>(2));

      if (!nwt[g][bit]) nwt[g][bit] = ++it;
      g = nwt[g][bit];

      while (t.size() <= it) t.push_back(N);
      t[g] = min(t[g], time);
    }
  }
  int get(int val, int time) {
    int g = 0;
    int ret = 0;
    for (int j = maxBit; j >= 1; --j) {
      while (nwt.size() <= g) nwt.push_back(vector<int>(2));
      while (t.size() <= it) t.push_back(N);
      int bit = (val >> j - 1 & 1);

      if (nwt[g][!bit] && t[nwt[g][!bit]] <= time) {
        ret |= (1 << j - 1);
        g = nwt[g][!bit];
      } else g = nwt[g][bit];

    }
    return ret;
  }

  vector<pii> allValues() {
    vector<pii> ret;
    for (auto &i : S) ret.push_back({i, tick[i]});
    return ret;
  }

  void clear() {
    nwt.clear();
    t.clear();
    tick.clear();
    S.clear();
  }

} node[N];


vector<pii> ad[N];
int d[N], t[N];
int answer[N];
void dfs(int u, int pre = 0) {
  int best = 0;
  for (const auto& duck : ad[u]) {
    int v, w; tie(v, w) = duck;
    if (v == pre) continue;
    dfs(v, u);
    if (!best || node[v].nwt.size() > node[best].nwt.size()) best = v;
  }

  swap(node[u], node[best]);
  for (const auto& duck : ad[u]) {
    int v, w; tie(v, w) = duck;
    if (v == pre || v == best) continue;
    for (auto &i : node[v].allValues()) node[u].add(i.first, i.second);
    node[v].clear();
  }
  node[u].add(d[u], t[u]);
  for (const auto& duck : Q[u]) {
    int a = duck.a, time = duck.t;
    answer[time] = node[u].get(d[a], time);
  }
}

int32_t main() {
  cin.tie(0)->sync_with_stdio(0);

  if (fopen("klasika.in.3g", "r")) {
    freopen("duck.inp", "r", stdin);
    freopen("duck.out", "w", stdout);
  }

  cin >> n;
  int cnt = 1;
  for (int i = 1; i <= n; ++i) {
    string ty;
    int x, y;
    cin >> ty >> x >> y;
    if (ty == "Add") {
      cnt += 1;
      ad[x].push_back({cnt, y});
      ad[cnt].push_back({x, y});
      d[cnt] = (d[x] ^ y);
      t[cnt] = i;
    } else {
      Q[y].push_back(Query(x, i));
    }
  }

  memset(answer, -1, sizeof answer);
  dfs(1);
  for (int i = 1; i <= n; ++i)
    if (answer[i] != -1) cout << answer[i] << "\n";
//  cerr << 1.0 * clock() / CLOCKS_PER_SEC << "\n";
}

Compilation message

klasika.cpp: In member function 'void trie::add(int, int)':
klasika.cpp:28:27: warning: suggest parentheses around '-' inside '>>' [-Wparentheses]
   28 |       int bit = (val >> j - 1 & 1);
      |                         ~~^~~
klasika.cpp:30:25: warning: comparison of integer expressions of different signedness: 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   30 |       while (nwt.size() <= g) nwt.push_back(vector<int>(2));
      |              ~~~~~~~~~~~^~~~
klasika.cpp:35:23: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   35 |       while (t.size() <= it) t.push_back(N);
      |              ~~~~~~~~~^~~~~
klasika.cpp: In member function 'int trie::get(int, int)':
klasika.cpp:43:25: warning: comparison of integer expressions of different signedness: 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   43 |       while (nwt.size() <= g) nwt.push_back(vector<int>(2));
      |              ~~~~~~~~~~~^~~~
klasika.cpp:44:23: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   44 |       while (t.size() <= it) t.push_back(N);
      |              ~~~~~~~~~^~~~~
klasika.cpp:45:27: warning: suggest parentheses around '-' inside '>>' [-Wparentheses]
   45 |       int bit = (val >> j - 1 & 1);
      |                         ~~^~~
klasika.cpp:48:24: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
   48 |         ret |= (1 << j - 1);
      |                      ~~^~~
klasika.cpp: In function 'int32_t main()':
klasika.cpp:102:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  102 |     freopen("duck.inp", "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
klasika.cpp:103:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  103 |     freopen("duck.out", "w", stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 17 ms 62808 KB Output is correct
2 Correct 13 ms 62812 KB Output is correct
3 Correct 15 ms 63196 KB Output is correct
4 Correct 14 ms 62812 KB Output is correct
5 Correct 14 ms 62816 KB Output is correct
6 Correct 14 ms 62964 KB Output is correct
7 Correct 14 ms 62988 KB Output is correct
8 Correct 14 ms 63068 KB Output is correct
9 Correct 13 ms 62712 KB Output is correct
10 Correct 13 ms 62812 KB Output is correct
11 Correct 14 ms 62976 KB Output is correct
12 Correct 14 ms 63160 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 17 ms 62808 KB Output is correct
2 Correct 13 ms 62812 KB Output is correct
3 Correct 15 ms 63196 KB Output is correct
4 Correct 14 ms 62812 KB Output is correct
5 Correct 14 ms 62816 KB Output is correct
6 Correct 14 ms 62964 KB Output is correct
7 Correct 14 ms 62988 KB Output is correct
8 Correct 14 ms 63068 KB Output is correct
9 Correct 13 ms 62712 KB Output is correct
10 Correct 13 ms 62812 KB Output is correct
11 Correct 14 ms 62976 KB Output is correct
12 Correct 14 ms 63160 KB Output is correct
13 Correct 15 ms 63580 KB Output is correct
14 Correct 16 ms 64408 KB Output is correct
15 Correct 17 ms 64784 KB Output is correct
16 Correct 17 ms 66064 KB Output is correct
17 Correct 16 ms 64348 KB Output is correct
18 Correct 21 ms 65784 KB Output is correct
19 Correct 22 ms 67224 KB Output is correct
20 Correct 24 ms 68624 KB Output is correct
21 Correct 16 ms 63832 KB Output is correct
22 Correct 18 ms 65176 KB Output is correct
23 Correct 20 ms 65812 KB Output is correct
24 Correct 20 ms 66576 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 311 ms 130020 KB Output is correct
2 Correct 440 ms 191616 KB Output is correct
3 Correct 588 ms 220128 KB Output is correct
4 Correct 759 ms 316448 KB Output is correct
5 Correct 594 ms 233632 KB Output is correct
6 Correct 1130 ms 431808 KB Output is correct
7 Runtime error 1197 ms 524288 KB Execution killed with signal 9
8 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 17 ms 62808 KB Output is correct
2 Correct 13 ms 62812 KB Output is correct
3 Correct 15 ms 63196 KB Output is correct
4 Correct 14 ms 62812 KB Output is correct
5 Correct 14 ms 62816 KB Output is correct
6 Correct 14 ms 62964 KB Output is correct
7 Correct 14 ms 62988 KB Output is correct
8 Correct 14 ms 63068 KB Output is correct
9 Correct 13 ms 62712 KB Output is correct
10 Correct 13 ms 62812 KB Output is correct
11 Correct 14 ms 62976 KB Output is correct
12 Correct 14 ms 63160 KB Output is correct
13 Correct 15 ms 63580 KB Output is correct
14 Correct 16 ms 64408 KB Output is correct
15 Correct 17 ms 64784 KB Output is correct
16 Correct 17 ms 66064 KB Output is correct
17 Correct 16 ms 64348 KB Output is correct
18 Correct 21 ms 65784 KB Output is correct
19 Correct 22 ms 67224 KB Output is correct
20 Correct 24 ms 68624 KB Output is correct
21 Correct 16 ms 63832 KB Output is correct
22 Correct 18 ms 65176 KB Output is correct
23 Correct 20 ms 65812 KB Output is correct
24 Correct 20 ms 66576 KB Output is correct
25 Correct 311 ms 130020 KB Output is correct
26 Correct 440 ms 191616 KB Output is correct
27 Correct 588 ms 220128 KB Output is correct
28 Correct 759 ms 316448 KB Output is correct
29 Correct 594 ms 233632 KB Output is correct
30 Correct 1130 ms 431808 KB Output is correct
31 Runtime error 1197 ms 524288 KB Execution killed with signal 9
32 Halted 0 ms 0 KB -