Submission #19042056
Source Code Expand
import sys
import math
sys.setrecursionlimit(10**8)
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,Q = map(int,input().split())
lsA = list(map(int,input().split()))
lsTXY = []
for i in range(Q):
lsTXY.append(list(map(int,input().split())))
SG = segki(N,lsA,mode='^')
for i in range(Q):
if lsTXY[i][0] == 1:
SG.update(lsTXY[i][1]-1,SG.leafvalue(lsTXY[i][1]-1)^lsTXY[i][2])
if lsTXY[i][0] == 2:
print(SG.query(lsTXY[i][1]-1,lsTXY[i][2]))
Submission Info
| Submission Time |
|
| Task |
F - Range Xor Query |
| User |
kohei2019 |
| Language |
PyPy3 (7.3.0) |
| Score |
600 |
| Code Size |
2723 Byte |
| Status |
AC |
| Exec Time |
900 ms |
| Memory |
162144 KiB |
Judge Result
| Set Name |
Sample |
All |
| Score / Max Score |
0 / 0 |
600 / 600 |
| Status |
|
|
| Set Name |
Test Cases |
| Sample |
sample_01.txt, sample_02.txt |
| All |
handmade_00.txt, handmade_01.txt, max_00.txt, max_01.txt, max_02.txt, max_03.txt, max_04.txt, max_05.txt, max_06.txt, max_07.txt, power_of_2_00.txt, power_of_2_01.txt, power_of_2_02.txt, random_00.txt, random_01.txt, random_02.txt, random_03.txt, random_04.txt, sample_01.txt, sample_02.txt |
| Case Name |
Status |
Exec Time |
Memory |
| handmade_00.txt |
AC |
61 ms |
62656 KiB |
| handmade_01.txt |
AC |
57 ms |
62680 KiB |
| max_00.txt |
AC |
782 ms |
161032 KiB |
| max_01.txt |
AC |
767 ms |
159900 KiB |
| max_02.txt |
AC |
749 ms |
159828 KiB |
| max_03.txt |
AC |
793 ms |
162144 KiB |
| max_04.txt |
AC |
900 ms |
161252 KiB |
| max_05.txt |
AC |
789 ms |
160476 KiB |
| max_06.txt |
AC |
680 ms |
158532 KiB |
| max_07.txt |
AC |
771 ms |
160068 KiB |
| power_of_2_00.txt |
AC |
644 ms |
141460 KiB |
| power_of_2_01.txt |
AC |
643 ms |
141308 KiB |
| power_of_2_02.txt |
AC |
712 ms |
146276 KiB |
| random_00.txt |
AC |
682 ms |
126192 KiB |
| random_01.txt |
AC |
525 ms |
125932 KiB |
| random_02.txt |
AC |
248 ms |
81404 KiB |
| random_03.txt |
AC |
622 ms |
131828 KiB |
| random_04.txt |
AC |
187 ms |
76612 KiB |
| sample_01.txt |
AC |
49 ms |
62644 KiB |
| sample_02.txt |
AC |
53 ms |
62544 KiB |