Submission #1191675

#TimeUsernameProblemLanguageResultExecution timeMemory
1191675LucaLucaMRoller Coaster Railroad (IOI16_railroad)C++20
30 / 100
112 ms11732 KiB
#include "railroad.h"
#include <iostream>
#include <vector>
#include <algorithm>
#include <cassert>

#define debug(x) #x << " = " << x << '\n'

using ll = long long;

const int INF = 1e9;

namespace DSU {
  std::vector<int> p;
  std::vector<int> sz;
  void init(int n) {
    p.resize(n + 1);
    sz.resize(n + 1, 1);
    for (int i = 0; i <= n; i++) {
      p[i] = i;
    }
  }
  int root(int u) {
    return p[u] == u? u : p[u] = root(p[u]);
  }
  void join(int u, int v) {
    u = root(u); 
    v = root(v);
    if (u != v) {
      p[u] = v;
      sz[v] += sz[u];
    }
  }
  bool isConnected() {
    return sz[root(1)] == (int) p.size() - 1;
  }
};

ll plan_roller_coaster(std::vector<int> s, std::vector<int> t) {
  int n = (int) s.size();
  std::vector<int> norm;
  s.push_back(INF);
  t.push_back(1);
  for (int x : s) {
    norm.push_back(x);
  }
  for (int x : t) {
    norm.push_back(x);
  }

  std::sort(norm.begin(), norm.end());
  norm.erase(std::unique(norm.begin(), norm.end()), norm.end());

  for (int &x : s) {
    x = std::lower_bound(norm.begin(), norm.end(), x) - norm.begin() + 1;
  }
  for (int &x : t) {
    x = std::lower_bound(norm.begin(), norm.end(), x) - norm.begin() + 1;
  }

  int m = (int) norm.size();
  std::vector<int> delta(m + 1, 0);

  DSU::init(m);

  for (int i = 0; i <= n; i++) {
    if (s[i] <= t[i]) {
      delta[s[i]]++;
      delta[t[i]]--;
    } else {
      delta[t[i]]--;
      delta[s[i]]++;
    }
    DSU::join(s[i], t[i]);
  }
  
  for (int i = 1; i <= m; i++) {
    delta[i] += delta[i - 1];
  }

  for (int i = 0; i <= m;  i++) {
    if (delta[i] > 0) {
      return 1;
    }
    if (delta[i] < 0) {
      DSU::join(i, i + 1);
    }
  }
  if (DSU::isConnected()) {
    return 0;
  } else {
    return 1;
  }
}

Compilation message (stderr)

railroad.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
railroad_c.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...