답안 #865899

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
865899 2023-10-25T02:27:22 Z NeroZein The Potion of Great Power (CEOI20_potion) C++17
0 / 100
653 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]]);
    }
  }
}

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); 
  //} 
  assert(st[x].size() && st[y].size());
  auto sx = st[x].back();
  auto sy = st[y].back(); 
  return get(sx, sy); 
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 11352 KB Incorrect
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 3 ms 11960 KB Incorrect
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 542 ms 128740 KB Output is correct
2 Correct 533 ms 129056 KB Output is correct
3 Correct 653 ms 222984 KB Output is correct
4 Runtime error 373 ms 262144 KB Execution killed with signal 9
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 464 ms 129428 KB Incorrect
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 12 ms 16804 KB Incorrect
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 11352 KB Incorrect
2 Halted 0 ms 0 KB -