結果

問題 No.2809 Sort Query
ユーザー hirayuu_yc
提出日時 2024-04-21 20:12:56
言語 PyPy3
(7.3.15)
結果
RE  
実行時間 -
コード長 1,580 bytes
コンパイル時間 547 ms
コンパイル使用メモリ 82,408 KB
実行使用メモリ 263,220 KB
最終ジャッジ日時 2024-07-12 20:57:19
合計ジャッジ時間 41,986 ms
ジャッジサーバーID
(参考情報)
judge1 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other RE * 71
権限があれば一括ダウンロードができます

ソースコード

diff #

from collections import deque
from array import array
import sys
input=sys.stdin.readline

class FenwickTree:
    def __init__(self,size):
        self.tree=array("i",[0]*(size+1))
        self.size=size
        self.start=size.bit_length()-1
    def add(self,pos,val):
        pos+=1
        while pos<=self.size:
            self.tree[pos]+=val
            pos+=pos&-pos
    def bisect(self,pos):
        now=0
        val=0
        for i in range(self.start,-1,-1):
            if now+(1<<i)<=self.size and val+self.tree[now+(1<<i)]<=pos:
                now+=1<<i
                val+=self.tree[now]
        return now

N,Q=map(int,input().split())
A=list(map(int,input().split()))
query=[tuple(map(int,i.split())) for i in sys.stdin.readlines()]
press=A[:]
for i in range(Q):
    if query[i][0]==1:
        press.append(query[i][2])
press.sort()
ser={}
for i in range(len(press)):
    ser[press[i]]=i
a=FenwickTree(len(press))
change=[-1]*N
chq=deque()
changed=set()
for i in range(N):
    A[i]=ser[A[i]]
    change[i]=A[i]
    changed.append(i)
a.add(0,N)
for i in range(Q):
    t,*q=query[i]
    if t==1:
        k,x=q
        x=ser[x]
        change[k-1]=x
        changed.add(k-1)
    if t==2:
        for j in changed:
            chq.append((a.bisect(j),change[j]))
            change[j]=-1;
        changed.clear()
        while chq:
            a.add(chq[-1][0],-1)
            a.add(chq[-1][1],1)
            chq.pop()
    if t==3:
        k=q[0]
        if change[k-1]==-1:
            print(press[a.bisect(k-1)])
        else:
            print(press[change[k-1]])
0