結果
問題 | No.2786 RMQ on Grid Path |
ユーザー |
![]() |
提出日時 | 2024-06-14 23:13:14 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 3,074 bytes |
コンパイル時間 | 402 ms |
コンパイル使用メモリ | 81,956 KB |
実行使用メモリ | 171,224 KB |
最終ジャッジ日時 | 2024-06-14 23:15:02 |
合計ジャッジ時間 | 30,800 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 29 TLE * 6 |
ソースコード
class dsu():n=1parent_or_size=[-1 for i in range(n)]def __init__(self,N):self.n=Nself.parent_or_size=[-1 for i in range(N)]def merge(self,a,b):assert 0<=a<self.n, "0<=a<n,a={0},n={1}".format(a,self.n)assert 0<=b<self.n, "0<=b<n,b={0},n={1}".format(b,self.n)x=self.leader(a)y=self.leader(b)if x==y:return xif (-self.parent_or_size[x]<-self.parent_or_size[y]):x,y=y,xself.parent_or_size[x]+=self.parent_or_size[y]self.parent_or_size[y]=xreturn xdef same(self,a,b):assert 0<=a<self.n, "0<=a<n,a={0},n={1}".format(a,self.n)assert 0<=b<self.n, "0<=b<n,b={0},n={1}".format(b,self.n)return self.leader(a)==self.leader(b)def leader(self,a):assert 0<=a<self.n, "0<=a<n,a={0},n={1}".format(a,self.n)if (self.parent_or_size[a]<0):return aself.parent_or_size[a]=self.leader(self.parent_or_size[a])return self.parent_or_size[a]def size(self,a):assert 0<=a<self.n, "0<=a<n,a={0},n={1}".format(a,self.n)return -self.parent_or_size[self.leader(a)]def groups(self):leader_buf=[0 for i in range(self.n)]group_size=[0 for i in range(self.n)]for i in range(self.n):leader_buf[i]=self.leader(i)group_size[leader_buf[i]]+=1result=[[] for i in range(self.n)]for i in range(self.n):result[leader_buf[i]].append(i)result2=[]for i in range(self.n):if len(result[i])>0:result2.append(result[i])return result2H,W=map(int,input().split())A=[list(map(int,input().split())) for i in range(H)]C=set()q=[]Q=int(input())for i in range(Q):a,b,c,d=map(int,input().split())q.append(((a-1)*W+b-1,(c-1)*W+d-1))C.add(i)L=[[] for i in range(H*W+1)]for i in range(H):for j in range(W):if i<H-1:x=A[i][j]y=A[i+1][j]z=max(x,y)L[z].append((i*W+j,(i+1)*W+j))if j<W-1:x=A[i][j]y=A[i][j+1]z=max(x,y)L[z].append((i*W+j,i*W+j+1))result=[0]*QZ=dsu(H*W)from math import sqrtk=int(sqrt(H*W))M=(H*W+k-1)//kD=[[] for i in range(M)]from math import sqrtk=int(sqrt(H*W))M=(H*W+k-1)//kD=[[] for i in range(M+1)]ans=[False]*Qfor i in range(M+1):l=i*kr=(i+1)*kfor j in range(k):z=i*k+jif z>H*W:breakfor B in L[z]:pos1,pos2=B[:]Z.merge(pos1,pos2)for j in range(Q):p1,p2=q[j][:]if ans[j]==True:continueif Z.same(p1,p2)==True:ans[j]=TrueD[i].append(j)result=[0]*QZ=dsu(H*W)ans=[False]*Qfor i in range(M+1):for j in range(k):z=i*k+jif z>H*W:breakfor B in L[z]:pos1,pos2=B[:]Z.merge(pos1,pos2)if len(L[z])>0:for j in D[i]:p1,p2=q[j]if ans[j]==True:continueif Z.same(p1,p2)==True:ans[j]=Trueresult[j]=zfor i in range(Q):print(result[i])