제출 #1172001

#제출 시각아이디문제언어결과실행 시간메모리
1172001fryingducTreasure (IOI24_treasure)C++20
100 / 100
249 ms6652 KiB
#include "treasure.h"

#include "bits/stdc++.h"

using namespace std;

#ifdef duc_debug
#include "bits/debug.h"
#else
#define debug(...)
#endif

const int maxn = 1e4 + 4;
const int inf = 5e8 + 1;

vector<int> encode(vector<pair<int, int>> P) {
  int n = (int)P.size();
  vector<int> res;
  vector<int> tx, ty;
  set<pair<int, int>> s;
  for (int i = 0; i < (int)P.size(); ++i) {
    ty.push_back(P[i].second);
    res.push_back(P[i].first);
    res.push_back(P[i].second + inf);
  }
  sort(ty.begin(), ty.end());
  for (int i = 0; i < (int)ty.size(); ++i) {
    s.insert(make_pair(ty[i], i));
  }
  sort(P.begin(), P.end());
  int cur = inf * 2;
  for (int i = 0; i < P.size(); ++i) {
    auto it = s.lower_bound(make_pair(P[i].second, -1));
    cur += it->second;
    res.push_back(cur);
    s.erase(it);
  }
  return res;
}

vector<pair<int, int>> decode(vector<int> S) {
  vector<int> tx, ty;
  vector<int> prf;
  for (auto i : S) {
    if (i < inf) {
      tx.push_back(i);
    } else if (i < inf * 2) {
      ty.push_back(i - inf);
    } else {
      prf.push_back(i);
    }
  }
  sort(tx.begin(), tx.end());
  sort(ty.begin(), ty.end());
  sort(prf.begin(), prf.end());
  vector<pair<int, int>> res;
  int prv = inf * 2;
  for (int i = 0; i < (int)prf.size(); ++i) {
    res.emplace_back(tx[i], ty[prf[i] - prv]);
    prv = prf[i];
  }
  debug(res);
  return res;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...