Submission #489761

#TimeUsernameProblemLanguageResultExecution timeMemory
489761BiccamFountain (eJOI20_fountain)C++14
100 / 100
485 ms21272 KiB
#include <bits/stdc++.h>
using namespace std;
#define IOS                       \
    ios_base::sync_with_stdio(0); \
    cin.tie(0);                   \
    cout.tie(0);
#define rep(i, a, n) for (int i = a; i <= n; i++)
#define repV(i, a, n) for (int i = n; i >= a; i--)
#define st first
#define nd second
#define pb push_back
#define mp make_pair
#define all(a) a.begin(), a.end()
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
typedef pair<int, int> pii;
constexpr int M = 1e5 + 5;
constexpr int LOG = 20;
int n, q, d, c, r, v, ans;
int dp[M][LOG], w[M][LOG];
priority_queue<pii> pq;

void solve()
{
    cin >> n >> q;
    rep(i, 1, n)
    {
        cin >> d >> w[i][0];
        while (pq.size() && pq.top().st > -d)
        {
            dp[pq.top().nd][0] = i; // ustawiam poprzedni
            pq.pop();
        }
        pq.push({-d, i});
    }
    /*rep(i, 1, n)
    {
        rep(j, 1, LOG - 1)
        {
            cout << dp[i][j] << " ";
        }
        cout << endl;
    }*/
    cout << endl;
    while (pq.size())
    {
        // dp[pq.top().st][0] = 0;
        pq.pop();
    }
    rep(j, 1, LOG - 1)
    {
        rep(i, 1, n)
        {
            dp[i][j] = dp[dp[i][j - 1]][j - 1];
            w[i][j] = w[dp[i][j - 1]][j - 1] + w[i][j - 1];
        }
    }
    /*rep(i, 1, n)
    {
        rep(j, 1, LOG - 1)
        {
            cout << dp[i][j] << " ";
        }
        cout << endl;
    }*/
}

void odp()
{
    rep(i, 1, q)
    {
        cin >> r >> v;
        repV(j, 0, LOG - 1)
        {
            if (v <= w[r][j])
                continue;
            v -= w[r][j];
            r = dp[r][j];
        }
        cout << r << endl;
    }
}

int main()
{
    IOS
    solve();
    odp();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...