#include <bits/stdc++.h>
using namespace std;
const int mxN = 1e5+1, LOG = 20;
vector<int> adj[mxN];
pair<int, long long> up[LOG][mxN];
long long d[mxN], c[mxN];
void dfs(int s, int e) {
for (auto u : adj[s]) {
if (u == e) continue;
up[0][u] = {s, c[s]};
dfs(u, s);
}
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
d[0] = 1e9+1, c[0] = 1e9+1;
for (int i = 0; i < LOG; ++i) {
for (int j = 0; j < mxN; ++j) {
up[i][j] = {-1, -1};
}
}
up[0][0] = {-1, 0};
int n, q;
cin >> n >> q;
for (int i = 1; i <= n; ++i) {
cin >> d[i] >> c[i];
}
stack<pair<int, int>> s; s.push({1e9+1, 0}); s.push({d[n], n}); adj[n].push_back(0); adj[0].push_back(n);
int f[n+1]; f[n] = 0;
for (int i = n-1; i >= 1; --i) {
while (s.top().first <= d[i]) {
s.pop();
}
f[i] = s.top().second;
s.push({d[i], i});
adj[i].push_back({f[i]}), adj[f[i]].push_back({i});
}
dfs(0, -1);
for (int i = 1; i < LOG; ++i) {
for (int j = 1; j <= n; ++j) {
up[i][j] = {up[i-1][up[i-1][j].first].first, up[i-1][up[i-1][j].first].second + up[i-1][j].second};
}
}
while (q--) {
int r, v;
cin >> r >> v;
v -= c[r];
for (int i = LOG-1; i >= 0; --i) {
if (up[i][r].second <= v) {
v -= up[i][r].second;
r = up[i][r].first;
}
}
cout << (v > 0 ? up[0][r].first : r) << '\n';
}
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
15 ms |
33876 KB |
Output is correct |
2 |
Correct |
15 ms |
34004 KB |
Output is correct |
3 |
Correct |
15 ms |
34024 KB |
Output is correct |
4 |
Correct |
15 ms |
34004 KB |
Output is correct |
5 |
Correct |
16 ms |
34004 KB |
Output is correct |
6 |
Correct |
16 ms |
34004 KB |
Output is correct |
7 |
Correct |
19 ms |
34128 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
188 ms |
46260 KB |
Output is correct |
2 |
Correct |
214 ms |
45948 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
15 ms |
33876 KB |
Output is correct |
2 |
Correct |
15 ms |
34004 KB |
Output is correct |
3 |
Correct |
15 ms |
34024 KB |
Output is correct |
4 |
Correct |
15 ms |
34004 KB |
Output is correct |
5 |
Correct |
16 ms |
34004 KB |
Output is correct |
6 |
Correct |
16 ms |
34004 KB |
Output is correct |
7 |
Correct |
19 ms |
34128 KB |
Output is correct |
8 |
Correct |
188 ms |
46260 KB |
Output is correct |
9 |
Correct |
214 ms |
45948 KB |
Output is correct |
10 |
Correct |
15 ms |
34004 KB |
Output is correct |
11 |
Correct |
84 ms |
39496 KB |
Output is correct |
12 |
Correct |
343 ms |
48032 KB |
Output is correct |
13 |
Correct |
219 ms |
44440 KB |
Output is correct |
14 |
Correct |
160 ms |
43168 KB |
Output is correct |
15 |
Correct |
140 ms |
43884 KB |
Output is correct |