結果

問題 No.742 にゃんにゃんにゃん 猫の挨拶
ユーザー kohei2019
提出日時 2022-03-31 23:47:07
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 123 ms / 2,500 ms
コード長 2,472 bytes
コンパイル時間 303 ms
コンパイル使用メモリ 81,984 KB
実行使用メモリ 79,096 KB
最終ジャッジ日時 2024-11-17 17:42:08
合計ジャッジ時間 1,884 ms
ジャッジサーバーID
(参考情報)
judge1 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 16
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

import sys
import math
sys.setrecursionlimit(10**7)
class segki():
#mode(min,max,sum,prd(product),gcd,lmc,^,&,|)
def __init__(self,N,ls,mode='min'): #N,ls
self.mode = mode
self.default = self.setdef()
self.N = N
self.K = (N-1).bit_length()
self.N2 = 1 << self.K
self.dat = [self.default]*(2**(self.K+1))
for i in range(self.N): #
self.dat[self.N2+i] = ls[i]
self.build()
def setdef(self):
if self.mode == 'min':return 1 << 60
elif self.mode == 'max':return -(1 << 60)
elif self.mode == 'sum':return 0
elif self.mode == 'prd':return 1
elif self.mode == 'gcd':return 0
elif self.mode == 'lmc':return 1
elif self.mode == '^':return 0
elif self.mode == '&':return (1 << 60)-1
elif self.mode == '|':return 0
def build(self):
for j in range(self.N2-1,-1,-1):
self.dat[j] = self.func(self.dat[j<<1],self.dat[j<<1|1]) #
def func(self,x,y):#
if self.mode == 'min': return min(x,y)
elif self.mode == 'max': return max(x,y)
elif self.mode == 'sum': return x+y
elif self.mode == 'prd': return x*y
elif self.mode == 'gcd': return math.gcd(x,y)
elif self.mode == 'lmc': return (x*y)//math.gcd(x,y)
elif self.mode == '^': return x^y
elif self.mode == '&': return x&y
elif self.mode == '|': return x|y
def leafvalue(self,x):
return self.dat[x+self.N2]
def update(self,x,y): #index(x)y
i = x+self.N2
self.dat[i] = y
while (i>0): #
i >>= 1
self.dat[i] = self.func(self.dat[i<<1],self.dat[i<<1|1])
return
def query(self,L,R): # [L,R)
L += self.N2
R += self.N2
vL = self.default
vR = self.default
while L < R:
if L & 1:
vL = self.func(vL,self.dat[L])
L += 1
if R & 1:
R -= 1
vR = self.func(self.dat[R],vR)
L >>= 1
R >>= 1
return self.func(vL,vR)
N = int(input())
ls = [int(input()) for i in range(N)]
SG = segki(N+1,[1]*(N+1),mode='sum')
ans = 0
for i in range(N):
m = SG.query(1,ls[i])
ans += m
SG.update(ls[i],0)
print(ans)
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0