Skip to content

Commit fbf050f

Browse files
committed
GST January SRM
1 parent 93d1dd9 commit fbf050f

File tree

5 files changed

+79
-32
lines changed

5 files changed

+79
-32
lines changed

CP/GST January SRM/problem1.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
for _ in range(int(input())):
2+
r,a,b,c,d = map(int,raw_input().split())
3+
if(r==a or r==b or r==c or r==d):
4+
print("YES")
5+
else :
6+
print("NO")

CP/GST January SRM/problem2.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
for kandu in xrange(int(raw_input())):
2+
sum = 0
3+
n = int(input())
4+
for i in range(n):
5+
a = map(int, raw_input().split())
6+
a = sorted(a)
7+
sum+=abs(a[n-1]-a[0])
8+
print(sum)

CP/January Challenge 2018/maxscore.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
for _ in range(int(input())):
2+

tree/morris_traversal.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,5 @@
11
"""Morris Traversal of a Binary Tree.
22
3-
Video
4-
-----
5-
6-
* https://youtu.be/wGXB9OWhPTg
7-
83
Analysis
94
--------
105

tree/segmenttreesum.py

Lines changed: 63 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -45,36 +45,13 @@ def update_value_util(segment_tree, low, high, diff, index, pos):
4545
update_value_util(segment_tree, low, mid, diff, index, 2*pos + 1)
4646
update_value_util(segment_tree, mid + 1, high, diff, index, 2*pos + 2)
4747

48-
def updateRange(int n, int us, int ue, int diff):
49-
updateRangeUtil(0, 0, n-1, us, ue, diff)
48+
def updateSegmentTreeRangeLazy( input, segmentTree, lazy, startRange, endRange, delta):
49+
updateSegmentTreeRangeLazy(segmentTree, lazy, startRange, endRange, delta, 0, input.length - 1, 0)
5050

51-
lazy = [0]*1000
5251

53-
def updateRangeUtil( si, ss, se, us, ue, diff):
54-
if (lazy[si] != 0):
55-
tree[si] += (se-ss+1)*lazy[si]
56-
if (ss != se):
57-
lazy[si*2 + 1] += lazy[si]
58-
lazy[si*2 + 2] += lazy[si]
52+
def rangeMinimumQueryLazy(segmentTree, lazy, qlow, qhigh, leni):
53+
return rangeMinimumQueryLazy(segmentTree, lazy, qlow, qhigh, 0, leni - 1, 0)
5954

60-
lazy[si] = 0
61-
62-
if (ss>se || ss>ue || se<us)
63-
return
64-
65-
if (ss>=us && se<=ue):
66-
tree[si] += (se-ss+1)*diff
67-
68-
if (ss != se):
69-
lazy[si*2 + 1] += diff
70-
lazy[si*2 + 2] += diff
71-
return
72-
73-
int mid = (ss+se)/2
74-
updateRangeUtil(si*2+1, ss, mid, us, ue, diff)
75-
updateRangeUtil(si*2+2, mid+1, se, us, ue, diff)
76-
77-
tree[si] = tree[si*2+1] + tree[si*2+2]
7855

7956
def next_power_of_2(n):
8057
if n == 0:
@@ -85,6 +62,57 @@ def next_power_of_2(n):
8562
n &= (n - 1)
8663
return n << 1
8764

65+
def updateSegmentTreeRangeLazy(segmentTree, lazy, startRange, endRange, delta, low, high, pos):
66+
if(low > high):
67+
return
68+
69+
if (lazy[pos] != 0):
70+
segmentTree[pos] += lazy[pos]
71+
if (low != high):
72+
lazy[2 * pos + 1] += lazy[pos]
73+
lazy[2 * pos + 2] += lazy[pos]
74+
lazy[pos] = 0
75+
76+
if(startRange > high || endRange < low):
77+
return
78+
79+
if(startRange <= low && endRange >= high):
80+
segmentTree[pos] += delta
81+
if(low != high):
82+
lazy[2*pos + 1] += delta
83+
lazy[2*pos + 2] += delta
84+
return
85+
86+
int mid = (low + high)/2
87+
updateSegmentTreeRangeLazy(segmentTree, lazy, startRange, endRange,delta, low, mid, 2*pos+1)
88+
updateSegmentTreeRangeLazy(segmentTree, lazy, startRange, endRange,delta, mid+1, high, 2*pos+2)
89+
segmentTree[pos] = Math.min(segmentTree[2*pos + 1], segmentTree[2*pos + 2])
90+
91+
def rangeMinimumQueryLazy(int segmentTree, int lazy[], int qlow, int qhigh, low, int high, int pos):
92+
if(low > high):
93+
return Integer.MAX_VALUE
94+
95+
if (lazy[pos] != 0)
96+
segmentTree[pos] += lazy[pos]
97+
if (low != high):
98+
lazy[2 * pos + 1] += lazy[pos]
99+
lazy[2 * pos + 2] += lazy[pos]
100+
lazy[pos] = 0
101+
102+
if(qlow > high || qhigh < low):
103+
return Integer.MAX_VALUE
104+
105+
if(qlow <= low && qhigh >= high):
106+
return segmentTree[pos]
107+
108+
int mid = (low+high)/2
109+
return Math.min(rangeMinimumQueryLazy(segmentTree, lazy, qlow, qhigh,
110+
low, mid, 2 * pos + 1),
111+
rangeMinimumQueryLazy(segmentTree, lazy, qlow, qhigh,
112+
mid + 1, high, 2 * pos + 2))
113+
114+
115+
88116
if __name__ == '__main__':
89117
input = [1,3,5,7,9,11]
90118
segment_tree = create_segment_tree(input)
@@ -97,3 +125,11 @@ def next_power_of_2(n):
97125
print(sum_range_query(segment_tree, 2, 5, len(input)))
98126
print(sum_range_query(segment_tree, 1, 3, len(input)))
99127
updateRange(len(input), 1, 5, 10)
128+
129+
#lazy propagation example
130+
input1 = [-1,2,4,1,7,1,3,2]
131+
segTree1 = create_segment_tree(input)
132+
lazy1 = []
133+
updateSegmentTreeRangeLazy(input1, segTree1, lazy1, 0, 3, 1)
134+
updateSegmentTreeRangeLazy(input1, segTree1, lazy1, 0, 0, 2)
135+
print(1 == rangeMinimumQueryLazy(segTree1, lazy1, 3, 5, input1.length))

0 commit comments

Comments
 (0)