답안 #799281

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
799281 2023-07-31T11:41:28 Z NeroZein The Potion of Great Power (CEOI20_potion) C++17
38 / 100
752 ms 262144 KB
#include "bits/stdc++.h"
 
using namespace std;
 
const int C = 1;
const int N = 3e5 + 5;
const int U = 3e5 + 5;
const int INF = 1e9; 
 
int h[N]; 
 
struct cmp {
  bool operator ()(int i, int j) const {
    return h[i] < h[j];
  }
};
 
int a[U], b[U];
set<int, cmp> cur[N]; 
vector<int> edits[N];
vector<set<int, cmp>> versions[N];
 
 
void edit (int v, set<int, cmp>& seU) {
  if (seU.count(v)) {
    seU.erase(v);
  } else {
    seU.insert(v);
  }
}
 
void init (int N_, int D, int H[]) {
  for (int i = 0; i < N_; ++i) {
    edits[i].push_back(0); 
    versions[i].push_back({});
    h[i] = H[i];
  }
}
 
void curseChanges (int U_, int A[], int B[]) {
  for (int day = 1; day <= U_; ++day) {
    a[day] = A[day - 1];
    b[day] = B[day - 1];
    edit(b[day], cur[a[day]]);
    edit(a[day], cur[b[day]]); 
    edits[a[day]].push_back(day);
    edits[b[day]].push_back(day);
    if (edits[a[day]].size() % C == 0) {
      versions[a[day]].push_back(cur[a[day]]);
    }
    if (edits[b[day]].size() % C == 0) {
      versions[b[day]].push_back(cur[b[day]]); 
    }
  }
}
 
int getDis (vector<int> h1, vector<int> h2) {//n + m
  if (h1.empty() || h2.empty()) {
    return INF; 
  }
  assert(is_sorted(h1.begin(), h1.end()));
  assert(is_sorted(h2.begin(), h2.end()));
  int ret = INF; 
  int i = 0, j = 0;
  int n = h1.size(), m = h2.size();
  while (i < n || j < m) {
    if (i < n && (j == m || h1[i] < h2[j])) {
      if (j < m) {
        ret = min(ret, h2[j] - h1[i]);        
      }
      i++;
    } else {
      if (i < n) {
        ret = min(ret, h1[i] - h2[j]);         
      }
      j++; 
    }
  }
  return ret;
} 
 
int question (int x, int y, int v) {
  if (x == y) return 0; 
  vector<int> vv[2] = {};
  vector<set<int, cmp>> se(2); 
  for (int rep = 0; rep < 2; ++rep) {
    int last_edit = upper_bound(edits[x].begin(), edits[x].end(), v) - edits[x].begin() - 1;
    se[rep] = versions[x][last_edit / C];
    int st = last_edit - (last_edit % C) + 1;
    for (; st <= last_edit; ++st) {
      int i = a[edits[x][st]], j = b[edits[x][st]];
      if (i != x) {
        assert(j == x);
        swap(i, j);
      }
      edit(j, se[rep]); 
    }
    for (auto i : se[rep]) vv[rep].push_back(h[i]);
    swap(x, y);
  }
  return getDis(vv[0], vv[1]); 
}
# 결과 실행 시간 메모리 Grader output
1 Correct 12 ms 28496 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 13 ms 29008 KB Output is correct
2 Correct 14 ms 28960 KB Output is correct
3 Correct 14 ms 29008 KB Output is correct
4 Correct 34 ms 39032 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 655 ms 147468 KB Output is correct
2 Correct 661 ms 147464 KB Output is correct
3 Correct 714 ms 241160 KB Output is correct
4 Runtime error 422 ms 262144 KB Execution killed with signal 9
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 346 ms 95264 KB Incorrect
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 52 ms 33836 KB Output is correct
2 Correct 136 ms 39288 KB Output is correct
3 Correct 143 ms 40064 KB Output is correct
4 Correct 721 ms 94792 KB Output is correct
5 Correct 752 ms 78852 KB Output is correct
6 Correct 148 ms 41228 KB Output is correct
7 Correct 572 ms 85000 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 12 ms 28496 KB Output is correct
2 Correct 13 ms 29008 KB Output is correct
3 Correct 14 ms 28960 KB Output is correct
4 Correct 14 ms 29008 KB Output is correct
5 Correct 34 ms 39032 KB Output is correct
6 Correct 655 ms 147468 KB Output is correct
7 Correct 661 ms 147464 KB Output is correct
8 Correct 714 ms 241160 KB Output is correct
9 Runtime error 422 ms 262144 KB Execution killed with signal 9
10 Halted 0 ms 0 KB -