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 56a61e8

Browse files
Create Readme.md
1 parent ee23098 commit 56a61e8

File tree

1 file changed

+31
-0
lines changed
  • Sorted_Container/3672.Sum-of-Weighted-Modes-in-Subarrays

1 file changed

+31
-0
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
### 3672.Sum-of-Weighted-Modes-in-Subarrays
2+
3+
比较容易想到设计两个容器:
4+
```cpp
5+
map<int,set<int>>freq2val;
6+
unordered_map<int,int>val2freq;
7+
```
8+
freq2val[f]里面放所有频率为f的元素(按照从小到大排序)。这样每个sliding window,我们就可以用`*(freq2val.rbegin()->second.begin())`找到其中的众数。val2[freq]顾名思义就是每种元素的频次。
9+
10+
每次我们加入一个新元素x,可以查到它的f。于是小心地更新这两个容器即可
11+
```cpp
12+
// 先删除{x,f}
13+
freq2val[f].erase(x);
14+
if (freq2val[f].empty())
15+
freq2val.erase(f);
16+
// 再加入{x,f+1}
17+
val2freq[x]=f+1;
18+
freq2val[f+1].insert(x);
19+
```
20+
同理,每次我们删除一个旧元素x,可以查到它的f。也是小心地更新这两个容器即可
21+
```cpp
22+
// 先删除{x,f}
23+
freq2val[f].erase(x);
24+
if (freq2val[f].empty())
25+
freq2val.erase(f);
26+
// 再加入{x,f+1}
27+
val2freq[x] = f-1;
28+
if (f!=1)
29+
freq2val[f-1].insert(x);
30+
```
31+
关键就是及时清理freq2val里没有值的key(即空频次),保证freq2val的结尾元素是有意义的。

0 commit comments

Comments
(0)

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