Skip to content

Commit 1b25410

Browse files
committed
2021.01.15
1 parent b3994e5 commit 1b25410

File tree

4 files changed

+163
-0
lines changed

4 files changed

+163
-0
lines changed

python/gold3/2836.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import sys
2+
input = sys.stdin.readline
3+
4+
N, M = map(int,input().split())
5+
arr = []
6+
for i in range(N):
7+
start,end = map(int,input().split())
8+
if start<end:continue
9+
arr.append([end,start])
10+
arr.sort()
11+
ped = arr[0][1]
12+
ans = M
13+
pst = arr[0][0]
14+
arr.append([1e9+1,1e9+1])
15+
for st,ed in arr:
16+
if ed<=ped:continue
17+
else:
18+
if st>ped:
19+
ans+=(ped-pst)*2
20+
pst = st
21+
ped = ed
22+
else:
23+
ped = ed
24+
print(ans)

python/plat2/7626.py

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import sys
2+
import bisect
3+
input = sys.stdin.readline
4+
5+
sys.setrecursionlimit(100000)
6+
n = int(input())
7+
arr = []
8+
M_y = 200000
9+
lenT = [0]*(M_y*4)
10+
tmp = []
11+
for _ in range(n):
12+
x1,x2,y1,y2 = map(int,input().split())
13+
arr.append([x1,y1,y2,1])
14+
arr.append([x2,y1,y2,-1])
15+
tmp.append(y1)
16+
tmp.append(y2)
17+
18+
tmp = sorted(set(tmp))
19+
M = len(tmp)
20+
for i in range(M-1):
21+
lenT[i+M] = tmp[i+1]-tmp[i]
22+
for i in range(M-1,0,-1):
23+
lenT[i] = lenT[i<<1]+lenT[i<<1 | 1]
24+
25+
def update(left, right, diff):
26+
def apply(i,v):
27+
lazy[i]+=v
28+
segTree[i]=lenT[i] if lazy[i] else segTree[i<<1]+segTree[i<<1|1] if i<M else 0
29+
30+
start,end = left,right
31+
while left!=right:
32+
if left & 1:
33+
apply(left,diff)
34+
left+=1
35+
if right & 1:
36+
right-=1
37+
apply(right,diff)
38+
left>>=1;right>>=1;
39+
segTree[start] = lenT[start] if lazy[start] else 0
40+
segTree[end] = lenT[end] if lazy[end] else 0
41+
idx = end>>1
42+
while idx:
43+
segTree[idx]=lenT[idx] if lazy[idx] else segTree[idx<<1]+segTree[idx<<1|1]
44+
idx>>=1
45+
idx = start>>1
46+
while idx:
47+
segTree[idx]=lenT[idx] if lazy[idx] else segTree[idx<<1]+segTree[idx<<1|1]
48+
idx>>=1
49+
arr.sort()
50+
px = arr[0][0]
51+
ans = 0
52+
lazy = [0]*(M_y*4)
53+
segTree = [0]*(M_y*4)
54+
for i in range(2*n):
55+
arr[i][1] = bisect.bisect_left(tmp,arr[i][1])+M
56+
arr[i][2] = bisect.bisect_left(tmp,arr[i][2])+M
57+
58+
for x,y1,y2,check in arr:
59+
dx = x-px
60+
px = x
61+
ans+=dx*segTree[1]
62+
update(y1,y2,check)
63+
print(ans)

python/plat3/3392.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import sys
2+
input = sys.stdin.readline
3+
4+
sys.setrecursionlimit(100000)
5+
n = int(input())
6+
arr = []
7+
for _ in range(n):
8+
x1,y1,x2,y2 = map(int,input().split())
9+
arr.append((x1,y1,y2-1,1))
10+
arr.append((x2,y1,y2-1,-1))
11+
12+
def update(idx, left, right, start, end, diff):
13+
if end<left or right<start: return
14+
#대표 구간 == 범위가 모두 포함되는 곳
15+
if start<=left and right<=end:
16+
lazy[idx]+=diff
17+
else:
18+
mid = (left+right)//2
19+
update(idx*2,left,mid,start,end,diff)
20+
update(idx*2+1,mid+1,right,start,end,diff)
21+
if lazy[idx]:segTree[idx]=right-left+1
22+
else:
23+
if left==right: segTree[idx]=0
24+
else: segTree[idx]=segTree[idx*2]+segTree[idx*2+1]
25+
26+
arr.sort()
27+
px = arr[0][0]
28+
ans = 0
29+
M_y = 30000
30+
lazy = [0]*(M_y*4)
31+
segTree = [0]*(M_y*4)
32+
for x,y1,y2,check in arr:
33+
dx = x-px
34+
px = x
35+
ans+=dx*segTree[1]
36+
update(1,0,M_y,y1,y2,check)
37+
print(ans)

python/plat4/2261.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import sys
2+
input = sys.stdin.readline
3+
4+
N = int(input())
5+
def dist(a,b):
6+
return (b[0]-a[0])**2 + (b[1]-a[1]) ** 2
7+
8+
9+
def sol(left, right):
10+
if right-left==2:return dist(arr[left],arr[left+1])
11+
elif right-left==3:
12+
return min(dist(arr[left],arr[left+1]),dist(arr[left+1],arr[left+2]),dist(arr[left],arr[left+2]))
13+
14+
mid = (right+left)//2
15+
d = min(sol(left,mid),sol(mid,right))
16+
tmp = []
17+
mid = arr[mid][0]
18+
for i in range(left,right):
19+
xdist = arr[i][0]-mid
20+
xdist*=xdist
21+
if xdist>d:continue
22+
tmp.append(arr[i])
23+
tmp.sort(key=lambda x:x[1])
24+
tmp_len = len(tmp)
25+
if tmp_len>1:
26+
for i in range(tmp_len-1):
27+
for j in range(i+1,tmp_len):
28+
if (tmp[i][1] - tmp[j][1]) **2 > d:
29+
break
30+
d = min(d, dist(tmp[i],tmp[j]))
31+
return d
32+
33+
arr = [list(map(int,input().split())) for _ in range(N)]
34+
arr = list(set(map(tuple,arr)))
35+
if len(arr)!=N:
36+
print(0)
37+
else:
38+
arr.sort()
39+
print(sol(0,len(arr)))

0 commit comments

Comments
 (0)