답안 #390022

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
390022 2021-04-15T05:38:40 Z acm Fountain (eJOI20_fountain) C++14
100 / 100
417 ms 40824 KB
#include <bits/stdc++.h>
#define speed                   \
  ios_base::sync_with_stdio(0); \
  cin.tie(0);                   \
  cout.tie(0);
#define precision     \
  cout.precision(30); \
  cerr.precision(10);
#define ll long long
#define ld long double
#define pll pair<ll, ll>
#define pii pair<int, int>
#define forn(n) for (int i = 1; i <= n; i++)
#define forlr(l, r) for (int i = l; i != r; (l > r ? i-- : i++))
#define pb(x) push_back(x)
#define sz(x) (int)x.size()
#define mp(x, y) make_pair(x, y)
#define all(x) x.begin(), x.end()
#define pc(x) __builtin_popcount(x)
#define pcll(x) __builtin_popcountll(x)
#define F first
#define S second
using namespace std;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
void ioi(string name) {
  freopen((name + ".in").c_str(), "r", stdin);
  freopen((name + ".out").c_str(), "w", stdout);
}
ll n, q, a[200005], b[200005], up[200005][21], pu[200005][21];
vector<ll> v;
int main() {
  speed;
  precision;
  // code
  cin >> n >> q;
  for (int i = 1; i <= n; i++) {
    cin >> a[i] >> b[i];
  }
  a[n + 1] = b[n + 1] = (1 << 30);
  up[n + 1][0] = n + 1;
  v.pb(n + 1);
  for (int i = n; i >= 1; i--) {
    while (a[v.back()] <= a[i]) v.pop_back();
    up[i][0] = v.back();
    pu[i][0] = b[up[i][0]];
    v.pb(i);
  }
  for (int i = 1; i <= 20; i++) {
    for (int j = 1; j <= n + 1; j++) {
      up[j][i] = up[up[j][i - 1]][i - 1];
      pu[j][i] = pu[j][i - 1] + pu[up[j][i - 1]][i - 1];
    }
  }
  while (q--) {
    ll v, r;
    cin >> v >> r;
    r -= b[v];
    for (int i = 20; i >= 0; i--) {
      if (pu[v][i] <= r) {
        r -= pu[v][i];
        v = up[v][i];
      }
    }
    if (r > 0) v = up[v][0];
    cout << (v > n ? 0 : v) << "\n";
  }
  // endl
#ifndef ONLINE_JUDGE
  cerr << "\nTime elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
#endif
  return 0;
}

Compilation message

fountain.cpp: In function 'void ioi(std::string)':
fountain.cpp:26:10: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
   26 |   freopen((name + ".in").c_str(), "r", stdin);
      |   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fountain.cpp:27:10: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
   27 |   freopen((name + ".out").c_str(), "w", stdout);
      |   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 332 KB Output is correct
2 Correct 1 ms 460 KB Output is correct
3 Correct 1 ms 588 KB Output is correct
4 Correct 1 ms 592 KB Output is correct
5 Correct 2 ms 716 KB Output is correct
6 Correct 2 ms 716 KB Output is correct
7 Correct 2 ms 716 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 285 ms 37576 KB Output is correct
2 Correct 331 ms 35296 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 332 KB Output is correct
2 Correct 1 ms 460 KB Output is correct
3 Correct 1 ms 588 KB Output is correct
4 Correct 1 ms 592 KB Output is correct
5 Correct 2 ms 716 KB Output is correct
6 Correct 2 ms 716 KB Output is correct
7 Correct 2 ms 716 KB Output is correct
8 Correct 285 ms 37576 KB Output is correct
9 Correct 331 ms 35296 KB Output is correct
10 Correct 2 ms 716 KB Output is correct
11 Correct 133 ms 22048 KB Output is correct
12 Correct 417 ms 40824 KB Output is correct
13 Correct 305 ms 39864 KB Output is correct
14 Correct 224 ms 38944 KB Output is correct
15 Correct 182 ms 39112 KB Output is correct