Submission #701883

#TimeUsernameProblemLanguageResultExecution timeMemory
701883lto5Lightning Rod (NOI18_lightningrod)C++14
66 / 100
2047 ms6804 KiB
#include <bits/stdc++.h>

using namespace std;

void debug_out() { cerr << '\n'; }
template <typename Head, typename... Tail>
void debug_out(Head H, Tail... T) {
  cerr << " " << H;
  debug_out(T...);
}
#define debug(...) cerr << "[" << #__VA_ARGS__ << "]:", debug_out(__VA_ARGS__)

namespace sub1 {
void solve(int n) {
  vector<pair<int, int>> vt;
  stack<int> st;
  while (n--) {
    int x, y;
    cin >> x >> y;
    vt.emplace_back(x + y, y - x);
  }
  sort(vt.begin(), vt.end());
  for (auto [x, y] : vt) {
    while (!st.empty() && st.top() <= y) {
      st.pop();
    }
    st.push(y);
  }
  // while (!st.empty()) {
  //   debug(st.top());
  //   st.pop();
  // }
  cout << st.size();
}
}  // namespace sub1

namespace sub2 {
const int N = 1e7 + 5;
pair<int, int> st[N];

void solve(int n) {
  int top = 0;
  st[0].second = -2e9;
  while (n--) {
    int x, y;
    cin >> x >> y;
    int nx = x + y;
    int ny = y - x;
    x = nx, y = ny;
    debug(x, y);
    while (top > 0 && st[top].first <= x) {
      top--;
    }
    // debug(top);
    if (top > 0 && st[top].second >= y) {
      continue;
    }
    // debug('.', top);
    st[++top] = {x, max(y, st[top - 1].second)};
  }
  cout << top;
}
}  // namespace sub2

int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
#define task "a"
  if (fopen(task ".inp", "r")) {
    freopen(task ".inp", "r", stdin);
    freopen(task ".out", "w", stdout);
  }
  int n;
  cin >> n;
  if (n <= 1e6) {
    sub1::solve(n);
    return 0;
  }
  sub2::solve(n);
  return 0;
}

Compilation message (stderr)

lightningrod.cpp: In function 'void sub1::solve(int)':
lightningrod.cpp:23:13: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   23 |   for (auto [x, y] : vt) {
      |             ^
lightningrod.cpp: In function 'void sub2::solve(int)':
lightningrod.cpp:59:8: warning: operation on 'top' may be undefined [-Wsequence-point]
   59 |     st[++top] = {x, max(y, st[top - 1].second)};
      |        ^~~~~
lightningrod.cpp: In function 'int main()':
lightningrod.cpp:71:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   71 |     freopen(task ".inp", "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
lightningrod.cpp:72:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   72 |     freopen(task ".out", "w", stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...