Submission #1158901

#TimeUsernameProblemLanguageResultExecution timeMemory
1158901LinkedArrayFountain (eJOI20_fountain)C++20
30 / 100
1595 ms3048 KiB
#include <bits/stdc++.h>
using namespace std;

using ll = long long;
#define pb push_back

vector<int> d, c, r, v;
vector<int> nge_idx;

int main () {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);

  int n, q, i, sum, j;
  bool met_end;

  cin >> n >> q;

  d = vector<int>(n + 1);
  c = vector<int>(n + 1);
  for (i = 1; i <= n; i++) {
    cin >> d[i] >> c[i];
  }

  // run next greater element
  nge_idx = vector<int>(n + 1, -1);
  stack<int> s;

  for (i = n; i >= 1; i--) {
    while (!s.empty() && d[s.top()] <= d[i]) {
      s.pop();
    }

    if (!s.empty()) {
      nge_idx[i] = s.top();
    }
    s.push(i);
  }

  r = vector<int>(q + 1);
  v = vector<int>(q + 1);
  for (i = 1; i <= q; i++) {
    cin >> r[i] >> v[i];

    j = r[i];
    sum = c[j];
    met_end = false;
    while (v[i] > sum) {
      if (nge_idx[j] == -1) {
        met_end = true;
        break;
      }

      j = nge_idx[j];
      sum += c[j];
    }

    if (met_end) {
      cout << "0\n";
      continue;
    }
    cout << j << "\n";
  }
  return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...