172962025-06-19 17:58:47algoproSzökőkútpypy3Elfogadva 100/100386ms44520 KiB
# UUID: e280199d-58c0-4573-ab7b-7b75c81ece7c
from sys import stdin, stdout
input = stdin.readline
print = stdout.write

MAXN = 100000
MAXQ = 200000

r = [0] * MAXN
cap = [0] * MAXN
qs = [[] for _ in range(MAXN)]
qans = [0] * MAXQ
stack = [0] * MAXN
psum = [0] * (MAXN + 1)

def solv():
    n,q = map(int,input().split())

    for i in reversed(range(n)):
        r[i],cap[i] = map(int,input().split())

    for i in range(q):
        j, vol = map(int,input().split())
        qs[n - j].append((vol, i))

    sp = 0
    psum[0] = 0

    for i in range(n):
        while sp > 0 and r[stack[sp - 1]] <= r[i]:
            sp -= 1
        stack[sp] = i
        sp += 1
        psum[sp] = psum[sp - 1] + cap[i]

        for vol, ansindex in qs[i]:
            if vol <= psum[sp]:
                st, dr = 0, sp
                while dr - st > 1:
                    mij = (st + dr) // 2
                    if psum[mij] + vol > psum[sp]:
                        dr = mij
                    else:
                        st = mij
                qans[ansindex] = n - stack[st]
            else:
                qans[ansindex] = 0

    for i in range(q):
        print(str(qans[i])+'\n')

solv()
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask130/30
1Elfogadva61ms27068 KiB
2Elfogadva74ms30448 KiB
3Elfogadva71ms30400 KiB
4Elfogadva90ms30864 KiB
5Elfogadva82ms30952 KiB
6Elfogadva83ms30976 KiB
7Elfogadva90ms31228 KiB
subtask230/30
1Elfogadva279ms38544 KiB
2Elfogadva331ms39464 KiB
subtask340/40
1Elfogadva97ms31064 KiB
2Elfogadva240ms37840 KiB
3Elfogadva370ms42984 KiB
4Elfogadva386ms44264 KiB
5Elfogadva384ms44356 KiB
6Elfogadva317ms44520 KiB