This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#include <unordered_map>
using namespace std;
#define ll long long
#define ar array
#define f first
#define s second
#define mpr make_pair
#define pb push_back
#define lb lower_bound
#define ub upper_bound
#define FOR(i, a, b) for(auto i = a; i < b; i++)
#define FORD(i, a, b) for(auto i = a - 1; i >= b; i--)
#define trav(x, v) for(auto x : v)
#define fastio ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define fileio freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout);
// --------------- SOLUTION --------------- //
const int MAXN = 1e5+5;
int N, Q;
int D[MAXN], C[MAXN];
pair<int, int> P[MAXN][25];
vector <pair<int, int>> ST;
void solve() {
cin >> N >> Q;
FOR(i, 0, N) {
cin >> D[i] >> C[i];
}
FORD(i, N, 0) {
while(!ST.empty() && ST.back().f <= D[i]) ST.pop_back();
if (ST.empty()) P[i][0] = {0, C[i]};
else P[i][0] = {ST.back().s, C[i]};
ST.pb({D[i], i});
}
FOR(j, 1, 20) {
FOR(i, 0, N) {
pair<int, int> c = P[P[i][j - 1].f][j - 1];
P[i][j] = {c.f, P[i][j - 1].s + c.s};
}
}
FOR(i, 0, Q) {
int R, V;
cin >> R >> V;
FORD(i, 20, 0) {
if(V > P[R][i].s){
V -= P[R][i].s;
R = P[R][i].f;
}
}
cout << R << '\n';
}
}
int main() {
fastio;
// fileio;
int tests = 1;
// cin >> tests;
while (tests--) {
solve();
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |