TLE даже после использования Ленивого Распространения в Дереве Сегментов в данной задаче - PullRequest
0 голосов
/ 25 февраля 2020

Я пытаюсь решить эту проблему в Hackerearth с деревом сегментов.
вот мой код в python

def update(current,start,end,l,r,value,tree,lazy):
    if lazy[current]!=0:
        tree[current]+=lazy[current]
        if start !=end:
            lazy[2*current+1]+=lazy[current]
            lazy[2*current+2]+=lazy[current]
        lazy[current]=0
    if start>end or r<start or l>end:
        return 0
    if start>=l and end<=r:
        tree[current]=value
        if start!=end:
            lazy[2*current+1]+=value
            lazy[2*current+2]+=value
        return 0
    mid=(start+end)//2
    update(2*current+1,start,mid,l,r,value,tree,lazy)
    update(2*current+2,mid+1,end,l,r,value,tree,lazy)
    tree[current]=max(tree[2*current+1],tree[2*current+2])
    return 0

def query(current,start,end,l,r,tree,lazy):
    if start>end or r<start or l>end:
        return 0
    if lazy[current]!=0:
        tree[current]+=lazy[current]
        if start!=end:
            lazy[2*current+1]+=lazy[current]
            lazy[2*current+2]+=lazy[current]
        lazy[current]=0
    if start>=l and end<=r:
        return tree[current]
    mid=(start+end)//2
    return max(query(2*current+1,start,mid,l,r,tree,lazy),query(2*current+2,mid+1,end,l,r,tree,lazy))


from collections import deque
tree=deque()
tree.extend([0]*2000001)
lazy=deque()
lazy.extend([0]*2000001)
n=int(input())
for _ in range(n):
    l,h,p,c,x=map(int,input().split( ))
    maximum=query(0,0,200000,x,x+l-1,tree,lazy)
    if c:
        update(0,0,200000,x,x+l-1,maximum+1,tree,lazy)
        update(0,0,200000,x+p-1,x+p-1,maximum+1+h,tree,lazy)
    else:
        q=query(0,0,200000,x+p-1,x+p-1,tree,lazy)
        if maximum-q>=h:
            update(0,0,200000,x,x+l-1,maximum+1,tree,lazy)
        else:
            update(0,0,200000,x,x+l-1,q+h+1,tree,lazy)
print(tree[0])

Я использовал дерево сегментов с ленивым распространением, но все же, это дает TLE
Если я отправляю этот код в C или C ++, тогда он работает нормально.
Что не так в моем коде ?? Кто-нибудь ??

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...