File tree Expand file tree Collapse file tree
Problems/Data-structures/Day-09/sol/ishanrajsingh Expand file tree Collapse file tree Original file line number Diff line number Diff line change 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 ))
You can’t perform that action at this time.
0 commit comments