Submission #865897

# Submission time Handle Problem Language Result Execution time Memory
865897 2023-10-25T02:25:11 Z NeroZein The Potion of Great Power (CEOI20_potion) C++17
38 / 100
1039 ms 262144 KB
#include "bits/stdc++.h"
using namespace std; 

const int S = 1;
const int MAX_N = 1e5 + 5; 
const int MAX_D = 2e5 + 5; 

int n;
int h[MAX_N];

void init(int N, int D, int H[]) {
  n = N;
  for (int i = 0; i < N; ++i) {
    h[i] = H[i];
  }
}

set<int> f[MAX_N];
int a[MAX_D], b[MAX_D];
vector<int> chng[MAX_N];
vector<set<int>> st[MAX_N];

void edit(set<int>& se, int z) {
  if (se.count(z)) se.erase(z);
  else se.insert(z); 
}

void curseChanges(int U, int A[], int B[]) {
  for (int i = 1; i <= U; ++i) {
    a[i] = A[i - 1], b[i] = B[i - 1]; 
  }
  for (int i = 0; i < n; ++i) {
    chng[i].push_back(0); 
    st[i].emplace_back(f[i]);
  }
  for (int i = 1; i <= U; ++i) {
    chng[a[i]].push_back(i);
    chng[b[i]].push_back(i);
    edit(f[a[i]], b[i]);
    edit(f[b[i]], a[i]);
    if (chng[a[i]].size() % S == 0) {
      st[a[i]].emplace_back(f[a[i]]);
    }
    if (chng[b[i]].size() % S == 0) {
      st[b[i]].emplace_back(f[b[i]]);
    }
  }
  for (int i = 0; i < n; ++i) {
    assert(st[i].size() == chng[i].size()); 
  }
}

int get(set<int>& x, set<int>& y) {
  vector<int> cx, cy;
  for (auto i : x) cx.push_back(h[i]);
  for (auto i : y) cy.push_back(h[i]);
  sort(cx.begin(), cx.end());
  sort(cy.begin(), cy.end());
  int ret = 1e9;
  for (int i = 0, j = 0; i < (int) cx.size() && j < (int) cy.size(); ) {
    if (cx[i] <= cy[j]) {
      ret = min(ret, cy[j] - cx[i++]); 
    } else {
      ret = min(ret, cx[i] - cy[j++]); 
    }
  }
  return ret;
}

int question(int x, int y, int v) {
  if (x == y) {
    return 0; 
  }
  int idx = upper_bound(chng[x].begin(), chng[x].end(), v) - chng[x].begin() - 1; 
  int idy = upper_bound(chng[y].begin(), chng[y].end(), v) - chng[y].begin() - 1; 
  int kx = idx - (idx % S), ky = idy - (idy % S); 
  auto sx = st[x][kx / S], sy = st[y][ky / S];
  for (int i = kx + 1; i <= idx; ++i) {
    int ind = chng[x][i];
    int o = a[ind] ^ b[ind] ^ x; 
    edit(sx, o); 
  }
  for (int i = ky + 1; i <= idy; ++i) {
    int ind = chng[y][i];
    int o = a[ind] ^ b[ind] ^ y;
    edit(sy, o); 
  } 
  return get(sx, sy); 
}
# Verdict Execution time Memory Grader output
1 Correct 2 ms 11352 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 11860 KB Output is correct
2 Correct 5 ms 11864 KB Output is correct
3 Correct 4 ms 11864 KB Output is correct
4 Correct 22 ms 21740 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 548 ms 128976 KB Output is correct
2 Correct 559 ms 128872 KB Output is correct
3 Correct 666 ms 222576 KB Output is correct
4 Runtime error 445 ms 262144 KB Execution killed with signal 9
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 528 ms 128832 KB Output is correct
2 Runtime error 263 ms 262144 KB Execution killed with signal 9
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 49 ms 17080 KB Output is correct
2 Correct 89 ms 22104 KB Output is correct
3 Correct 153 ms 22872 KB Output is correct
4 Correct 1034 ms 77660 KB Output is correct
5 Correct 1039 ms 61516 KB Output is correct
6 Correct 133 ms 24152 KB Output is correct
7 Correct 815 ms 67724 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 11352 KB Output is correct
2 Correct 4 ms 11860 KB Output is correct
3 Correct 5 ms 11864 KB Output is correct
4 Correct 4 ms 11864 KB Output is correct
5 Correct 22 ms 21740 KB Output is correct
6 Correct 548 ms 128976 KB Output is correct
7 Correct 559 ms 128872 KB Output is correct
8 Correct 666 ms 222576 KB Output is correct
9 Runtime error 445 ms 262144 KB Execution killed with signal 9
10 Halted 0 ms 0 KB -