Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 3affc20

Browse files
Added Code
1 parent bc13c33 commit 3affc20

File tree

9 files changed

+202
-9
lines changed

9 files changed

+202
-9
lines changed

‎18. Divide & Conquer/8. Aggressive Cows.py‎

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
# Accepted on SPOJ
2-
2+
33
def canPlaceCow(arr,n,c,min_sep):
44

5-
cnt = 1
5+
cnt = 1# Placed cow in first stall
66
lastCowBarn = arr[0]
77

88
for i in range(1,n):
9-
if arr[i] - lastCowBarn >= min_sep:
10-
cnt+=1
11-
lastCowBarn = arr[i]
9+
if arr[i] - lastCowBarn >= min_sep:# Cow can be placed at this stall
10+
cnt+=1
11+
lastCowBarn = arr[i]# updating last barn pos
1212

13-
if cnt == c:
13+
if cnt == c:# Successfully places all cows at given min sep
1414
return True
1515

1616
return False
@@ -33,7 +33,7 @@ def min_dist(arr,n,c):
3333

3434
if cowsRakhPaye:
3535
st = mid+1
36-
ans = mid
36+
ans = max(mid,ans)
3737

3838
else:
3939
end = mid-1

‎18. Divide & Conquer/9. Book Allocation.py‎

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,9 @@ def solve(arr,N,M):
2626
ans = sys.maxsize
2727

2828
while(st<=end):
29-
3029
mid = (st+end)//2
3130

3231
minPageHoPaye = minPagePossible(arr,N,M,mid)
33-
3432
if minPageHoPaye:
3533
end = mid-1
3634
ans = min(mid,ans)
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import sys
2+
3+
def build_tree(tree,arr,ss,se,index):
4+
5+
if ss==se:
6+
tree[index] = arr[ss]
7+
return
8+
9+
mid = (ss+se)//2
10+
build_tree(tree,arr,ss,mid,2*index)
11+
build_tree(tree,arr,mid+1,se,2*index+1)
12+
tree[index] = min(tree[2*index],tree[2*index+1])
13+
14+
15+
16+
arr = [int(i) for i in input().split()]
17+
n = len(arr)
18+
tree = [sys.maxsize for i in range(4*n+1)]
19+
build_tree(tree,arr,0,n-1,1)
20+
print(tree)
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
import sys
2+
3+
def build_tree(tree,arr,ss,se,index):
4+
5+
if ss==se:
6+
tree[index] = arr[ss]
7+
return
8+
9+
mid = (ss+se)//2
10+
build_tree(tree,arr,ss,mid,2*index)
11+
build_tree(tree,arr,mid+1,se,2*index+1)
12+
tree[index] = min(tree[2*index],tree[2*index+1])
13+
14+
def lazy_update(tree,arr,ss,se,qs,qe,inc,index):
15+
# resolve lazy value if exist
16+
if lazy[index]!=0:
17+
tree[index]+=lazy[index]
18+
19+
# check if child exists, i.e it is not leaf node
20+
if ss!=se:
21+
lazy[2*index]+=lazy[index]
22+
lazy[2*index+1]+=lazy[index]
23+
24+
lazy[index] = 0
25+
26+
# No Overlap
27+
if se<qs or qe<ss:
28+
return
29+
30+
# complete overlap case
31+
if ss>=qs and qe>=se:
32+
tree[index]+=inc
33+
34+
if ss!=se:
35+
lazy[2*index]+=inc
36+
lazy[2*index+1]+=inc
37+
return
38+
39+
# Partial Overlap
40+
mid = (ss+se)//2
41+
42+
lazy_update(tree,arr,ss,mid,qs,qe,inc,2*index)
43+
lazy_update(tree,arr,mid+1,se,qs,qe,inc,2*index+1)
44+
45+
tree[index] = min(tree[2*index],tree[2*index+1])
46+
47+
48+
def lazy_query(tree,arr,ss,se,qs,qe,index):
49+
# resolve lazy value if exist
50+
if lazy[index]!=0:
51+
tree[index]+=lazy[index]
52+
53+
# check if child exists, i.e it is not leaf node
54+
if ss!=se:
55+
lazy[2*index]+=lazy[index]
56+
lazy[2*index+1]+=lazy[index]
57+
58+
lazy[index] = 0
59+
60+
# No Overlap
61+
if ss>qe or se<qs:
62+
return sys.maxsize
63+
64+
# Complete Overlap
65+
if qs<=ss and qe>=se:
66+
return tree[index]
67+
68+
# partial Overlap
69+
mid = (ss+se)//2
70+
left = lazy_query(tree,arr,ss,mid,qs,qe,2*index)
71+
right = lazy_query(tree,arr,mid+1,se,qs,qe,2*index+1)
72+
73+
return min(left,right)
74+
75+
76+
77+
78+
#arr = [int(i) for i in input().split()]
79+
arr = [1, 3, 2, -5, 6, 4]
80+
n = len(arr)
81+
tree = [sys.maxsize for i in range(4*n+1)]
82+
lazy = [0 for i in range(4*n+1)]
83+
84+
build_tree(tree,arr,0,n-1,1)
85+
lazy_update(tree,arr,0,n-1,0,2,10,1)
86+
lazy_update(tree,arr,0,n-1,0,4,10,1)
87+
print(lazy_query(tree,arr,0,n-1,1,1,1))
88+
lazy_update(tree,arr,0,n-1,3,4,10,1)
89+
print(lazy_query(tree,arr,0,n-1,3,5,1))
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
import sys
2+
3+
def build_tree(tree,arr,ss,se,index):
4+
5+
if ss==se:
6+
tree[index] = arr[ss]
7+
return
8+
9+
mid = (ss+se)//2
10+
build_tree(tree,arr,ss,mid,2*index)
11+
build_tree(tree,arr,mid+1,se,2*index+1)
12+
tree[index] = tree[2*index]+tree[2*index+1]
13+
14+
15+
def lazy_update(tree,arr,ss,se,qs,qe,inc,index):
16+
# resolve lazy value if exist
17+
if lazy[index]!=0:
18+
tree[index] = tree[index]+ (se-ss+1)*lazy[index]
19+
20+
# check if child exists, i.e it is not leaf node
21+
if ss!=se:
22+
lazy[2*index]+=lazy[index]
23+
lazy[2*index+1]+=lazy[index]
24+
25+
lazy[index] = 0
26+
27+
# No Overlap
28+
if se<qs or qe<ss:
29+
return
30+
31+
# complete overlap case
32+
if ss>=qs and qe>=se:
33+
tree[index]= tree[index]+ (se-ss+1)*inc
34+
35+
if ss!=se:
36+
lazy[2*index]+=inc
37+
lazy[2*index+1]+=inc
38+
return
39+
40+
# Partial Overlap
41+
mid = (ss+se)//2
42+
43+
lazy_update(tree,arr,ss,mid,qs,qe,inc,2*index)
44+
lazy_update(tree,arr,mid+1,se,qs,qe,inc,2*index+1)
45+
46+
tree[index] = tree[2*index]+tree[2*index+1]
47+
48+
49+
def lazy_query(tree,arr,ss,se,qs,qe,index):
50+
# resolve lazy value if exist
51+
if lazy[index]!=0:
52+
tree[index] = tree[index]+ (se-ss+1)*lazy[index]
53+
54+
# check if child exists, i.e it is not leaf node
55+
if ss!=se:
56+
lazy[2*index]+=lazy[index]
57+
lazy[2*index+1]+=lazy[index]
58+
59+
lazy[index] = 0
60+
61+
# No Overlap
62+
if ss>qe or se<qs:
63+
return 0
64+
65+
# Complete Overlap
66+
if qs<=ss and qe>=se:
67+
return tree[index]
68+
69+
# partial Overlap
70+
mid = (ss+se)//2
71+
left = lazy_query(tree,arr,ss,mid,qs,qe,2*index)
72+
right = lazy_query(tree,arr,mid+1,se,qs,qe,2*index+1)
73+
74+
return left+right
75+
76+
77+
78+
arr = [1, 3, 2, -5, 6, 4]
79+
n = len(arr)
80+
tree = [0 for i in range(4*n+1)]
81+
lazy = [0 for i in range(4*n+1)]
82+
build_tree(tree,arr,0,n-1,1)
83+
#print(tree)
84+
lazy_update(tree,arr,0,n-1,1,4,10,1)
85+
#print(tree)
86+
print(lazy_query(tree,arr,0,n-1,1,3,1))

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /