Submission #465274

#TimeUsernameProblemLanguageResultExecution timeMemory
465274CyberCowFountain (eJOI20_fountain)C++17
60 / 100
98 ms5236 KiB
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <string>
#include <cmath>
#include <map>
#include <unordered_map>
#include <fstream>
#include <iomanip>
#include <iterator>
#include <stack>
using namespace std;
using ll = long long;
int d[100005], c[100005], pref[100005];
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int n, q, i, j;
    cin >> n >> q;
    for ( i = 0; i < n; i++)
    {
        cin >> d[i] >> c[i];
    }
    if (n <= 1000)
    {
        for (i = 0; i < q; i++)
        {
            int x, y;
            cin >> x >> y;
            x--;
            j = x;
            y -= c[j];
            int g = 1;
            while (j >= 0 && y > 0)
            {
                int h = j + 1;
                while (h < n && d[j] >= d[h])
                {
                    h++;
                }
                if (h >= n)
                {
                    g = 0;
                    break;
                }
                j = h;
                y -= c[j];
            }
            if (g)
                cout << j + 1 << '\n';
            else
                cout << 0 << '\n';
        }
    }
    else
    {
        pref[1] = c[0];
        for ( i = 1; i < n; i++)
        {
            pref[i + 1] = pref[i] + c[i];
        }
        pref[n] = 1000000000;
        for ( i = 0; i < q; i++)
        {
            int x, y;
            cin >> x >> y;
            int ind = lower_bound(pref + 1, pref + n + 2, pref[x - 1] + y) - pref;
            if (ind == n)
                cout << 0 << '\n';
            else
                cout << ind << '\n';
        }
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...