Skip to content

Commit 333d107

Browse files
authored
Create 1790D. Matryoshkas.cpp
1 parent de3fbca commit 333d107

File tree

1 file changed

+70
-0
lines changed

1 file changed

+70
-0
lines changed

CodeForces/1790D. Matryoshkas.cpp

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
int const N = 4e5 + 1;
6+
int t, n, a[N], freq[N];
7+
vector<int> all;
8+
9+
int main() {
10+
scanf("%d", &t);
11+
12+
while (t-- != 0) {
13+
all.clear();
14+
memset(freq, 0, sizeof freq);
15+
16+
scanf("%d", &n);
17+
for (int i = 0; i < n; ++i) {
18+
scanf("%d", a + i);
19+
all.push_back(a[i]);
20+
}
21+
22+
sort(a, a + n);
23+
24+
for(int i = 0; i < n - 1; ++i) {
25+
if(a[i + 1] - a[i] <= 1) {
26+
continue;
27+
}
28+
29+
all.push_back(a[i] + 1);
30+
}
31+
32+
sort(all.begin(), all.end());
33+
all.resize(unique(all.begin(), all.end()) - all.begin());
34+
35+
int mx = 0;
36+
for (int i = 0; i < n; ++i) {
37+
a[i] = lower_bound(all.begin(), all.end(), a[i]) - all.begin();
38+
++freq[a[i]];
39+
mx = max(mx, a[i]);
40+
}
41+
42+
long long res = 0, diff;
43+
for (int i = 0; i < mx + 1; ++i) {
44+
if (freq[i] == 0) {
45+
continue;
46+
}
47+
48+
res += freq[i];
49+
50+
while (i < N - 1 && freq[i] != 0) {
51+
while (i < N - 1 && freq[i + 1] >= freq[i]) {
52+
res += freq[i + 1] - freq[i];
53+
++i;
54+
}
55+
56+
while (i < N - 1 && freq[i] > freq[i + 1]) {
57+
++i;
58+
}
59+
60+
if (freq[i] == 0) {
61+
break;
62+
}
63+
}
64+
}
65+
66+
printf("%d\n", res);
67+
}
68+
69+
return 0;
70+
}

0 commit comments

Comments
 (0)