Skip to content

Commit 8338e7a

Browse files
authored
Merge pull request #509 from ishanrajsingh/day9-q1
Add salary queries solution
2 parents 31fedf6 + 77a2aaa commit 8338e7a

1 file changed

Lines changed: 55 additions & 0 deletions

File tree

  • Problems/Data-structures/Day-09/sol/ishanrajsingh
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
#Salary Queries - A company has n employees with certain salaries. We have to keep track of the salaries and process queries.
2+
#Approach - Use coordinate compression + Binary Indexed Tree
3+
#Time Complexity - O((n+q)log(n+q))
4+
5+
import sys
6+
input = sys.stdin.readline
7+
8+
n, q = map(int, input().split())
9+
p = list(map(int, input().split()))
10+
11+
queries = []
12+
vals = set(p)
13+
14+
for _ in range(q):
15+
s = input().split()
16+
if s[0] == '!':
17+
k, x = int(s[1]), int(s[2])
18+
queries.append(('!', k - 1, x))
19+
vals.add(x)
20+
else:
21+
a, b = int(s[1]), int(s[2])
22+
queries.append(('?', a, b))
23+
vals.add(a)
24+
vals.add(b)
25+
26+
vals = sorted(vals)
27+
idx = {v: i + 1 for i, v in enumerate(vals)}
28+
29+
m = len(vals)
30+
bit = [0] * (m + 1)
31+
32+
def add(i, v):
33+
while i <= m:
34+
bit[i] += v
35+
i += i & -i
36+
37+
def sum_(i):
38+
s = 0
39+
while i > 0:
40+
s += bit[i]
41+
i -= i & -i
42+
return s
43+
44+
for x in p:
45+
add(idx[x], 1)
46+
47+
for qu in queries:
48+
if qu[0] == '!':
49+
i, x = qu[1], qu[2]
50+
add(idx[p[i]], -1)
51+
p[i] = x
52+
add(idx[x], 1)
53+
else:
54+
a, b = qu[1], qu[2]
55+
print(sum_(idx[b]) - sum_(idx[a] - 1))

0 commit comments

Comments
 (0)