Блог пользователя aviiiii2130

Автор aviiiii2130, история, 119 минут назад, По-английски

n , m = map(int , input().split()) nums = list(map(int , input().split()))

ST = [float("inf") for _ in range(4*n)]

def build(node , l , r):
    global nums , ST
    if l == r:
        ST[node] = [nums[l],1]
    else:
        mid = l + (r-l)//2 
        build(2*node , l , mid)
        build(2*node +1 , mid+1 , r)
        if ST[2*node][0] < ST[2*node + 1][0]:
            ST[node] = ST[2*node]
        elif ST[2*node][0] > ST[2*node + 1][0]:    
            ST[node] = ST[2*node + 1]
        else:
            ST[node] = [ST[2*node][0] , ST[2*node][1] + ST[2*node + 1][1]] 

build(1 , 0 , n-1)

def update(node , l , r , ind , val):
    global nums , ST
    if l == r:
        nums[ind] = val
        ST[node] = [val,1]
    else:
        mid = l + (r-l)//2
        if l <= ind and ind <= mid:
            update(2*node , l , mid , ind , val)
        else:
            update(2*node+1 , mid+1 , r ,ind , val)
        if ST[2*node][0] < ST[2*node + 1][0]:
            ST[node] = ST[2*node]
        elif ST[2*node][0] > ST[2*node + 1][0]:    
            ST[node] = ST[2*node + 1]
        else:
            ST[node] = [ST[2*node][0] , ST[2*node][1] + ST[2*node + 1][1]] 
def query(node , l , r , ql ,qr):
    global nums , ST
    if qr < l or ql > r:
        return [float("inf"), 0]
    if l <= ql and r <= qr:
        return ST[node]
    mid = l+(r-l)//2
    left = query(2*node , l , mid , ql ,qr)
    right = query(2*node+1 , mid+1 , r , ql ,qr)
    if left[0] < right[0]:
        return left
    elif right[0] < left[0]:
        return right
    else:
        return [left[0] , left[1] + right[1]]

for _ in range(m):
    ch , x , y = map(int , input().split())
    if ch == 1:
        update(1 , 0 , n-1 , x , y)
    if ch == 2:
        res = query(1 , 0 , n-1 , x , y-1)
        print(res[0] , res[1])
                    

I don't know whats wrong with my code :(

  • Проголосовать: нравится
  • 0
  • Проголосовать: не нравится

»
116 минут назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Auto comment: topic has been updated by aviiiii2130 (previous revision, new revision, compare).

»
103 минуты назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

i think you should change your build ST[node] = ... to what you did in the update function

»
60 минут назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Inside your query you have if l <= ql and r <= qr:

But it is l<=ql and qr<=r

»
51 минуту назад, скрыть # |
 
Проголосовать: нравится +1 Проголосовать: не нравится

Also it is not an error this line if l <= ind and ind <= mid: in your update, but you can simply ignore the first condition I think. i.e. just if ind <= mid: