def CeilIndex(A, l, r, key): # ๋ด๋ฆผ์ฐจ์์ผ๋ ์ฌ์ฉํ๋ binary search.
while (r - l > 1):
m = l + (r - l)//2
if (A[m] >= key):
r = m
else:
l = m
return r
def LIS(l):
mm=[0]*len(l)
pos=[0]*len(l)
end=0
maxend=0
lenmm=0
for j in range(len(l)):
if end>0:
lenmm=max(lenmm,end)
r=CeilIndex(mm,-1,lenmm-1,l[j])
if mm[r]>=l[j]:
mm[r]=l[j]
pos[j]=r
end=r+1
else:
mm[r+1]=l[j]
pos[j]=r+1
end=r+2
maxend=max(maxend,end)
else:
mm[end]=l[j]
pos[j]=end
end+=1
maxend=max(maxend,end)
s=[]
t=maxend-1
for i in range(len(pos)-1,-1,-1):
if t==pos[i]:
s.append(l[i])
t-=1
return maxend, reversed(s)l=None
def findroot(a):
global l
_root=a
while l[_root]!=_root:
_root=l[_root]
l[a]=_root#์ ์ถ๊ฒฐ๊ณผ๋ก ๋ณด๋ฉด ์๋๊ฒ ๋ ๋น ๋ฆ. (Path Compression)
return _root
def setroot(a,b):#union
global l#,l_size
root_a=findroot(a)
root_b=findroot(b)
if root_a != root_b:
l[root_b]=root_a
"""
v = [] # ๊ฐ์ ๋ค.
v.append( [๋
ธ๋๋ฒํธ,๋
ธ๋๋ฒํธ,๊ฐ์ค์น] )
m # ๋
ธ๋์ ์.
"""
def mst(v,m):
global l#,l_size
l = [i for i in range( m )] # disjoint set
i=0
totalLen = 0
v.sort(key=lambda x:x[2] ) # ๊ฐ์ค์น๋ก ์ ๋ ฌ.
c = 0 # ์ ํํ ๊ฐ์ ์ ์.
while c < m - 1:
a = v[i][0]
b = v[i][1]
if findroot(a) != findroot(b): #์งํฉ์ ํฉ์น๋ ๊ฐ์ ์ ์ ํ.
setroot(a,b)
totalLen += v[i][2]
c += 1
i+=1
return totalLenimport heapq
e = 10 # ๋
ธ๋์ ์.
source = 0 # ์์์ง์
v=[set() for _ in range(e)]#๊ฐ์ : ํฌ์ ๊ทธ๋ํ์ผ๋ set()์ ์ฐ๋ฉด ๋น ๋ฆ.
dis=[[inf]*e for _ in range(e)]#์์ ์ง์ ์์ ๊ฐ ์ง์ ๊น์ง์ ๊ฑฐ๋ฆฌ
inf=9999999
h=[]#heap
heapq.heappush(h,(0,source))
while len(h)>0:
dmin=inf
k=-1#์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ ํ์ ๋์ ์์ ์งํฉ C ์ค์์ ์์ ๋
ธ๋์์ ๊ฐ์ฅ ๊ฐ๊น์ด ๋
ธ๋
dmin,k=heapq.heappop(h)
dis[source][k]=dmin
t=dmin+1
for node in ( v[k] ):
if t<dis[source][node]:
dis[source][node]=t
heapq.heappush(h, (t,node) )"""
for๋ฌธ์ ๋ณ์์ ์ ์.
k๊ฐ i๋ถํฐ j๊น์ง์ ์ต๋จ๊ฑฐ๋ฆฌ ์์ ๋
ธ๋๋ผ๋ฉด
i->k k->j์ ๋ถ๋ถ์ ์ต์ ์ด ๋์ด์ผํจ.
k๋ฅผ ์ง๋๊ฐ๋ ๋ชจ๋ ๋
ธ๋์ ์.
๊ฐ์ค์น๊ฐ ์์ด๋ฉด ์๋จ.
"""
#Floyd Warshall
for k in range(1,20+1):
for i in range(1,20+1):
for j in range(1,20+1):
if dis[i][j]>dis[i][k]+dis[k][j]:
dis[i][j]=dis[i][k]+dis[k][j]
dis[j][i]=dis[i][k]+dis[k][j]// Floyd Warshall algorithm
/*
์ ์ฝ๋๋ ์ฐจ์ด: ๋ฐฉํฅ์ด ์์
i->j์ ๊ฑฐ๋ฆฌ์ i->k->j์ ๊ฑฐ๋ฆฌ๋ฅผ ๋น๊ตํด์ i->j์ ๊ฑฐ๋ฆฌ๋ฅผ ์
๋ฐ์ดํธ ํจ
์ด๋ฏธ ์๋ ๊ฒฝ๋ก์ k๊ฐ ๋ผ์ด ๋ค๊ฑฐ๋ k๊ฐ ๊ฒฝ๋ก๋ฅผ ์ด์ด์ค๋ค.
i->j => i->k->j // k๋ฅผ ๊ฒฝ์ ํ๊ธฐ
i->k, k->j => i->k->j // i๋ j๊ฐ k๋ฅผ ๊ฒฝ์ ํด์ ์ด์ด์ง
k ๋ฃจํ ์์ i๋ j์ ๋ฃจํ๊ฐ ์์ด์ผํ๋ค.
*/
for(let k=0;k<100;k++){
for(let i=0;i<100;i++){
for(let j=0;j<100;j++){
g[i][j]=Math.min(g[i][j], g[i][k]+g[k][j])
}
}
}def divisors(n):#n๊ณผ n์ ์ฝ์๋ค์ ์ค๋ฆ์ฐจ ์์ผ๋ก ์ถ๋ ฅ
r1=[]
r2=[]
sqrtn=int(n**(1/2))
a = 1
while a * a < n:
if not n % a:
r1.append(a)
r2.append(n // a)
a += 1
if sqrtn * sqrtn == n:
r1.append(sqrtn)
r2.reverse()
return r1+r2
print(divisors(244324**2))def radix(n,r):#n์ r์ง๋ฒ์ผ๋ก ์ถ๋ ฅ
ret=""
if n==0:
return "0"
while n>0:
n,m=divmod(n,r)
ret="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[m]+ret
return ret#x์ y๋ ๋๋ค ์ ์.
def sqrt(x):#Babylonian method
if x == 0 or x == 1:
return x
y = x//2
while y > x//y:
y = (x // y + y) // 2
return y1 ์ ์์๊ฐ ์๋.
def primenum(N):
cut=int(N**(1/2))
primenums=[2]
for i in range(3,N+1,2):
p=True
for c in primenums:
if i%c==0:
p=False
break
elif c>cut:
break
if p:
primenums.append(i)
if i>cut:
break
#primenums.append(1)
return primenumsconst long long N = 3000001;
vector<long long> primes;
bitset<N> primeFlag;
int primesieve(long long n){
primeFlag.flip();
long long i = 2;
if(primeFlag[i]){//์์์ผ๋
long long x = 2 * i;//p[i]๋ true๋ก ์ ์ง.
primes.push_back(2);
while (x < n){
primeFlag[x] = false;
x += i;
}
}
for(i = 3;i < n;i+=2){
if(primeFlag[i]){//์์์ผ๋
long long x = 2 * i;//p[i]๋ true๋ก ์ ์ง.
primes.push_back(i);
while (x < n){
primeFlag[x] = false;
x += i;
}
}
}
return 0;
}def isprime(n):
if n==2:
return True
if n%2==0:
return False
if n==1:
return False
sqrtN=int( pow(n,1/2) )
for x in range(3,sqrtN+1,2):
if n%x==0:
return False
return True#binary search (lower bound : ํฌ๊ฑฐ๋ ๊ฐ์ ๊ฐ์ ์์น)
a=0
b=len(y)-1
while a<b:
m=(a+b)//2
if y[m]<q:
a=m+1
else:
b=m
print(y[a])#ํฌ๊ฑฐ๋ ๊ฐ์ ๊ฐ"""
W์ธ ๊ณณ์ ๊ฐฏ์๋ฅผ ์ถ๋ ฅ.
"""
def sol(img,i,j):# (i,j) : ์์ ์์น.
rBound=len(img)
cBound=len(img[0])
v=[[0]*cBound for _ in range(rBound)]#visted, count war eagles
q=[]#queue
cnt=0
q.append([i,j])
while len(q)>0:
ii,jj=q.pop(0)
if ii<0 or jj<0 or rBound<=ii or cBound<=jj:#out of bound
continue
if img[ii][jj]=='W' and v[ii][jj]==0:
v[ii][jj]=1
cnt+=1
for qq in [ii-1,ii,ii+1]:
for ww in [jj-1,jj,jj+1]:
q.append([qq,ww])
return cntn=10
l=[i for i in range(n)]
def findroot(a):#root๋ฅผ ์ฐพ๋๋ค.
global l
_root=a
while l[_root]!=_root:
_root=l[_root]
l[a]=_root#์ ์ถ๊ฒฐ๊ณผ๋ก ๋ณด๋ฉด ์๋๊ฒ ๋ ๋น ๋ฆ. (Path Compression)
return _root
def setroot(a,b):#union
global l
root_a=findroot(a)
root_b=findroot(b)
if root_a != root_b:
l[root_b] = root_a
#setsize[root_a] += setsize[root_b]
def cntsets():# ์งํฉ์ ์. (์ถ๋ ฅ์ n๊ฐ์์ 1๊ฐ)
global l
ll=map(findroot,l)
return len(set(ll)) vector <int> l(5001);
vector <int> setsize(5001);
int n=0;//์ฌ๋์
auto findroot=[&](int i){//root๋ฅผ ์ฐพ์.
int _i=i;
while (l[_i]!=_i){
_i=l[_i];
}
l[i]=_i;
return _i;
};
auto setroot=[&](int a,int b){//๋์ root๋ฅผ ์ผ์น์ํด. b์ ๋ฃจํธ๋ก ์ผ์น์ํด. (union)
a=findroot(a);
b=findroot(b);
if(a!=b){
setsize[b]=setsize[a]+setsize[b];//๊ฐ ์งํฉ์ elements์ ์๋ฅผ unionํ ๋๋ง๋ค ๊ณ์ฐ.
l[a]=b;
}
};
auto cntElements=[&](int e){//e๊ฐ ์ํ ์งํฉ์ elements์ ๊ฐฏ์.
int root=findroot(e);
return setsize[root];
};class f:
def __init__(self, n,LIS):
self.n=n
self.l=None
self.r=None
btree=f(l[0],1)
maxn=-9999999
for j in range(1,len(l)):
node=btree
new_node=f(l[j],1)
while True:
if new_node.n<node.n:
if node.l:
node=node.l
else:
node.l=new_node
break
elif new_node.n>node.n:
if node.r:
node=node.r
else:
node.r=new_node
break
#์ขํ -> ์์ ๊ทธ๋ํ
"""
๊ฐ์ ์ ์ขํ๋ฅผ ์
๋ ฅ๋ฐ์.
๊ฐ ์ขํ๋ฅผ ๋
ธ๋๋ก ์ทจ๊ธ.
๋ชจ๋ ๋
ธ๋์ ๋
ธ๋ ์ฌ์ด์ ๊ฐ์ ์ด ์๋ค๊ณ ๊ฐ์ . ๊ฐ ๊ฐ์ ์ด ์๋ ๋
ธ๋์ ๊ธธ์ด๋ฅผ ์ถ๋ ฅ.
"""
import math
def distance(x1,y1,x2,y2):
return math.sqrt( (x1-x2)**2+(y1-y2)**2 )
def pointsToGraph(points,n):
distances=[]#๊ฐ points ๊ฑฐ๋ฆฌ.
for i in range(n-1):
for j in range(i+1,n):
d=distance( points[i][0],points[i][1],points[j][0],points[j][1] )
distances.append([i,j,d])
return distancesimport math
def distance(x1,y1,x2,y2):
return math.sqrt( (x1-x2)**2+(y1-y2)**2 )