172942025-06-19 17:39:06algoproSzökőkútpypy3Időlimit túllépés 30/1001.097s90344 KiB
# UUID: 350baf8c-5eaa-4fcf-a6a7-9a58e14785d3
from sys import stdin, stdout
input = stdin.readline
print = stdout.write

def solv():
    kov = [[0] * 19 for _ in range(100011)]
    ert = [[0] * 19 for _ in range(100011)]
    szel = [0] * 100011
    kap = [0] * 100011

    n,q = map(int,input().split())

    for i in range(1, n + 1):
        szel[i],kap[i] = map(int,input().split())

    s = [n+1]
    szel[n + 1] = 10**9 + 10

    for i in range(n, 0, -1):
        while szel[s[-1]] <= szel[i]:
            s.pop()
        kov[i][0] = s[-1]
        ert[i][0] = kap[i]
        s.append(i)

    for j in range(1, 19):
        for i in range(1, n + 1):
            kov[i][j] = kov[kov[i][j - 1]][j - 1]
            ert[i][j] = ert[i][j - 1] + ert[kov[i][j - 1]][j - 1]

    output = []
    for _ in range(q):
        kezd, hany = map(int,input().split())

        for i in reversed(range(19)):
            if kezd == n + 1:
                break
            if ert[kezd][i] < hany:
                hany -= ert[kezd][i]
                kezd = kov[kezd][i]
        output.append(str(0 if kezd > n else kezd))

    print('\n'.join(output))

solv()
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask130/30
1Elfogadva111ms65904 KiB
2Elfogadva149ms68500 KiB
3Elfogadva135ms69268 KiB
4Elfogadva160ms69036 KiB
5Elfogadva136ms69096 KiB
6Elfogadva136ms69096 KiB
7Elfogadva150ms69096 KiB
subtask20/30
1Időlimit túllépés1.062s86992 KiB
2Elfogadva870ms89396 KiB
subtask30/40
1Elfogadva158ms69108 KiB
2Elfogadva528ms81052 KiB
3Időlimit túllépés1.095s88640 KiB
4Időlimit túllépés1.097s88976 KiB
5Elfogadva939ms89828 KiB
6Elfogadva544ms90344 KiB