Skip to content

Commit b3994e5

Browse files
committed
2021.01.13
1 parent 2e9161e commit b3994e5

File tree

3 files changed

+103
-0
lines changed

3 files changed

+103
-0
lines changed

python/plat4/10999.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import sys
2+
input = sys.stdin.readline
3+
print = sys.stdout.write
4+
N, M, K = map(int,input().split())
5+
a_tree = [0]*(N+2)
6+
b_tree = [0]*(N+2)
7+
def update(tree,idx,diff):
8+
while idx<N+1:
9+
tree[idx]+=diff
10+
idx+=(idx&-idx)
11+
def get(a,b):
12+
def getIdx(idx):
13+
ret = 0
14+
ret2 = 0
15+
tmp = idx
16+
while idx>0:
17+
ret+=a_tree[idx]
18+
ret2+=b_tree[idx]
19+
idx-=(idx&-idx)
20+
return ret*tmp+ret2
21+
return getIdx(b)-getIdx(a-1)
22+
23+
p=0
24+
def rangeUpdate(L,R,diff):
25+
update(a_tree, L,diff)
26+
update(a_tree, R+1,-diff)
27+
update(b_tree, L,(-L+1)*diff)
28+
update(b_tree, R+1,R*diff)
29+
30+
31+
for idx in range(1,N+1):
32+
n = int(input())
33+
rangeUpdate(idx,idx,n)
34+
for _ in range(M+K):
35+
row = list(map(int,input().split()))
36+
L,R = row[1],row[2]
37+
if L>R:L,R=R,L
38+
if row[0]==1:
39+
rangeUpdate(L,R,row[3])
40+
else:
41+
print("%d\n"%get(L,R))

python/plat4/11375.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import sys
2+
input = sys.stdin.readline
3+
4+
N, M = map(int,input().split())
5+
arr = [[]]
6+
7+
def bfs(idx):
8+
visited[idx]=True
9+
for nx in arr[idx]:
10+
if p[nx]==-1 or (not visited[p[nx]] and bfs(p[nx])):
11+
p[nx]=idx
12+
return True
13+
return False
14+
15+
p = [-1]*(M+1)
16+
for _ in range(N):
17+
arr.append(list(map(int,input().split()))[1:])
18+
ans = 0
19+
for idx in range(1,N+1):
20+
visited = [False]*(N+1)
21+
if bfs(idx):ans+=1
22+
23+
print(ans)

python/plat4/5419.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+
T = int(input())
4+
5+
def update(idx):
6+
idx+=size//2
7+
while idx>0:
8+
tree[idx]+=1
9+
idx=idx//2
10+
11+
def sum(s,e,node,ns,ne):
12+
if(e<=ns or ne<=s):return 0
13+
if(s<=ns and ne<=e):return tree[node]
14+
mid = (ns+ne)//2
15+
return sum(s,e,node*2,ns,mid)+sum(s,e,node*2+1,mid,ne)
16+
17+
while T:
18+
T-=1
19+
n = int(input())
20+
size = 1<<18
21+
arr = [list(map(int,input().split())) for _ in range(n)]
22+
tree = [0]*size
23+
arr.sort(key = lambda x : (x[1]))
24+
r = 0
25+
newY = [0]*n
26+
for i in range(n):
27+
if i>0 and arr[i][1]!=arr[i-1][1]:r+=1
28+
newY[i]=r
29+
30+
for i in range(n):
31+
arr[i][1]=newY[i]
32+
arr.sort(key = lambda x:(x[0],-x[1]))
33+
ans = 0
34+
35+
for i in range(n):
36+
ans+=sum(arr[i][1],size//2,1,0,size//2)
37+
update(arr[i][1])
38+
39+
print(ans)

0 commit comments

Comments
 (0)