# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
766522 |
2023-06-25T18:27:52 Z |
lukameladze |
Teams (IOI15_teams) |
C++17 |
|
3891 ms |
174700 KB |
#include "teams.h"
#include <bits/stdc++.h>
using namespace std;
#define f first
#define s second
//#define int long long
#define pii pair <int, int>
#define pb push_back
const int N = 5e5 + 5;
int n,m,tree[30 * N], le_[30 * N], ri_[30 * N], cur, k[N], dp[N],a[N],b[N],root[N];
vector <int> v[N];
set <int> s1;
set <pii> s;
int merge(int a, int b) {
return a + b;
}
void build(int node, int le, int ri) {
if (le == ri) {
return ;
}
le_[node] = ++cur;
ri_[node] = ++cur;
int mid = (le + ri) / 2;
build(le_[node], le, mid);
build(ri_[node], mid + 1, ri);
tree[node] = merge(tree[le_[node]], tree[ri_[node]]);
}
void update(int node, int le, int ri, int idx, int val) {
if (le > idx || ri < idx) return ;
if (le == ri) {
tree[cur] = tree[node] + val;
return ;
}
int mid = (le + ri) / 2;
int vert = cur;
le_[cur] = le_[node];
ri_[cur] = ri_[node];
if (idx <= mid) {
le_[vert] = ++cur;
}
else {
ri_[vert] = ++cur;
}
update(le_[node], le, mid, idx, val);
update(ri_[node], mid + 1, ri, idx, val);
tree[vert] = merge(tree[le_[vert]], tree[ri_[vert]]);
}
int getans(int node, int le, int ri, int start, int end) {
if (le > end || ri < start) return 0;
if (le >= start && ri <= end) return tree[node];
int mid = (le + ri) / 2;
return merge(getans(le_[node], le, mid, start, end), getans(ri_[node], mid + 1, ri, start, end));
}
void init(int N, int A[], int B[]) {
n = N;
for (int i = 1; i <= n; i++) {
a[i] = A[i - 1]; b[i] = B[i - 1];
v[a[i]].pb(b[i]);
}
root[0] = 1; cur = 1;
build(1, 1, n);
for (int i = 1; i <= n; i++) {
root[i] = root[i - 1];
for (int x : v[i]) {
int pr_root = root[i];
root[i] = ++cur;
update(pr_root, 1, n, x, 1);
}
}
}
int get(int i, int j) {
int le = k[j] + 1, ri = n, ans = 0;
while (le <= ri) {
int mid = (le + ri) / 2;
if (dp[i] + (getans(root[k[j]], 1,n, mid, n) - getans(root[k[i]],1,n, mid, n)) < dp[j]) {
ans = mid; ri = mid - 1;
} else le = mid + 1;
}
return ans;
}
void del(int idx) {
if (!s1.count(idx)) return ;
s1.erase(idx);
auto it = s1.upper_bound(idx);
int nxt = (it == s1.end() ? -1 : *it);
int pre = (it == s1.begin() ? -1 : *(--it));
if (pre != -1) {
if (get(pre, idx)) s.erase({get(pre, idx), idx});
}
if (nxt != -1) {
if (get(idx, nxt)) s.erase({get(idx, nxt), nxt});
}
if (pre != -1 && nxt != -1) {
if (get(pre, nxt)) s.insert({get(pre, nxt), nxt});
}
}
void add(int idx) {
if (s1.count(idx)) return ;
if (!s1.size()) { s1.insert(idx); return ; }
auto it = s1.upper_bound(idx);
int nxt = (it == s1.end() ? -1 : *it);
int pre = (it == s1.begin() ? -1 : *(--it));
if (pre != -1 && nxt != -1) {
if (get(pre, nxt)) s.erase({get(pre, nxt), nxt});
}
if (pre != -1) if(get(pre, idx)) s.insert({get(pre, idx), idx});
if (nxt != -1) if (get(idx, nxt)) s.insert({get(idx, nxt), nxt});
s1.insert(idx);
}
int can(int M, int K[]) {
s.clear(); s1.clear();
m = M;
for (int i = 1; i <= m; i++) {
k[i] = K[i - 1]; dp[i] = 0;
}
sort(k + 1, k + m + 1);
add(0);
for (int i = 1; i <= m; i++) {
while (s.size() && (*s.begin()).f <= k[i]) {
del((*s.begin()).s);
}
int id = (*--s1.end());
dp[i] = dp[id] + getans(root[k[i]], 1, n, k[i], n) - getans(root[k[id]], 1, n, k[i], n) - k[i];
if (dp[i] < 0) {
return 0;
}
add(i);
}
return 1;
}
Compilation message
teams.cpp: In function 'int merge(int, int)':
teams.cpp:14:22: warning: declaration of 'b' shadows a global declaration [-Wshadow]
14 | int merge(int a, int b) {
| ~~~~^
teams.cpp:10:71: note: shadowed declaration is here
10 | int n,m,tree[30 * N], le_[30 * N], ri_[30 * N], cur, k[N], dp[N],a[N],b[N],root[N];
| ^
teams.cpp:14:15: warning: declaration of 'a' shadows a global declaration [-Wshadow]
14 | int merge(int a, int b) {
| ~~~~^
teams.cpp:10:66: note: shadowed declaration is here
10 | int n,m,tree[30 * N], le_[30 * N], ri_[30 * N], cur, k[N], dp[N],a[N],b[N],root[N];
| ^
teams.cpp: In function 'void init(int, int*, int*)':
teams.cpp:56:15: warning: declaration of 'N' shadows a global declaration [-Wshadow]
56 | void init(int N, int A[], int B[]) {
| ~~~~^
teams.cpp:9:11: note: shadowed declaration is here
9 | const int N = 5e5 + 5;
| ^
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
5 ms |
11988 KB |
Output is correct |
2 |
Correct |
6 ms |
12048 KB |
Output is correct |
3 |
Correct |
6 ms |
12116 KB |
Output is correct |
4 |
Correct |
6 ms |
12116 KB |
Output is correct |
5 |
Correct |
6 ms |
12052 KB |
Output is correct |
6 |
Correct |
6 ms |
12140 KB |
Output is correct |
7 |
Correct |
6 ms |
12052 KB |
Output is correct |
8 |
Correct |
6 ms |
12116 KB |
Output is correct |
9 |
Correct |
6 ms |
12096 KB |
Output is correct |
10 |
Correct |
6 ms |
12112 KB |
Output is correct |
11 |
Correct |
6 ms |
12048 KB |
Output is correct |
12 |
Correct |
7 ms |
12116 KB |
Output is correct |
13 |
Correct |
7 ms |
12116 KB |
Output is correct |
14 |
Correct |
8 ms |
12048 KB |
Output is correct |
15 |
Correct |
6 ms |
12116 KB |
Output is correct |
16 |
Correct |
6 ms |
12116 KB |
Output is correct |
17 |
Correct |
6 ms |
12052 KB |
Output is correct |
18 |
Correct |
6 ms |
12116 KB |
Output is correct |
19 |
Correct |
9 ms |
12172 KB |
Output is correct |
20 |
Correct |
6 ms |
12056 KB |
Output is correct |
21 |
Correct |
6 ms |
12052 KB |
Output is correct |
22 |
Correct |
5 ms |
12116 KB |
Output is correct |
23 |
Correct |
6 ms |
12048 KB |
Output is correct |
24 |
Correct |
6 ms |
12116 KB |
Output is correct |
25 |
Correct |
5 ms |
11988 KB |
Output is correct |
26 |
Correct |
5 ms |
12116 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
49 ms |
40068 KB |
Output is correct |
2 |
Correct |
51 ms |
40100 KB |
Output is correct |
3 |
Correct |
52 ms |
40120 KB |
Output is correct |
4 |
Correct |
67 ms |
41424 KB |
Output is correct |
5 |
Correct |
32 ms |
38760 KB |
Output is correct |
6 |
Correct |
31 ms |
38584 KB |
Output is correct |
7 |
Correct |
31 ms |
38552 KB |
Output is correct |
8 |
Correct |
30 ms |
38652 KB |
Output is correct |
9 |
Correct |
121 ms |
39544 KB |
Output is correct |
10 |
Correct |
72 ms |
38328 KB |
Output is correct |
11 |
Correct |
34 ms |
38680 KB |
Output is correct |
12 |
Correct |
30 ms |
37444 KB |
Output is correct |
13 |
Correct |
35 ms |
39168 KB |
Output is correct |
14 |
Correct |
40 ms |
38560 KB |
Output is correct |
15 |
Correct |
49 ms |
39820 KB |
Output is correct |
16 |
Correct |
48 ms |
39860 KB |
Output is correct |
17 |
Correct |
34 ms |
39088 KB |
Output is correct |
18 |
Correct |
34 ms |
39200 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
62 ms |
40824 KB |
Output is correct |
2 |
Correct |
60 ms |
40816 KB |
Output is correct |
3 |
Correct |
482 ms |
44160 KB |
Output is correct |
4 |
Correct |
55 ms |
41368 KB |
Output is correct |
5 |
Correct |
306 ms |
39300 KB |
Output is correct |
6 |
Correct |
260 ms |
39316 KB |
Output is correct |
7 |
Correct |
36 ms |
39324 KB |
Output is correct |
8 |
Correct |
205 ms |
39356 KB |
Output is correct |
9 |
Correct |
118 ms |
39492 KB |
Output is correct |
10 |
Correct |
266 ms |
38736 KB |
Output is correct |
11 |
Correct |
287 ms |
39244 KB |
Output is correct |
12 |
Correct |
351 ms |
38260 KB |
Output is correct |
13 |
Correct |
771 ms |
40116 KB |
Output is correct |
14 |
Correct |
814 ms |
42288 KB |
Output is correct |
15 |
Correct |
702 ms |
40764 KB |
Output is correct |
16 |
Correct |
702 ms |
40784 KB |
Output is correct |
17 |
Correct |
667 ms |
39876 KB |
Output is correct |
18 |
Correct |
758 ms |
39952 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
515 ms |
167888 KB |
Output is correct |
2 |
Correct |
461 ms |
167960 KB |
Output is correct |
3 |
Correct |
2453 ms |
174700 KB |
Output is correct |
4 |
Correct |
484 ms |
168980 KB |
Output is correct |
5 |
Correct |
808 ms |
159160 KB |
Output is correct |
6 |
Correct |
736 ms |
159332 KB |
Output is correct |
7 |
Correct |
144 ms |
159232 KB |
Output is correct |
8 |
Correct |
601 ms |
159104 KB |
Output is correct |
9 |
Correct |
632 ms |
161552 KB |
Output is correct |
10 |
Correct |
761 ms |
157720 KB |
Output is correct |
11 |
Correct |
787 ms |
157688 KB |
Output is correct |
12 |
Correct |
991 ms |
158520 KB |
Output is correct |
13 |
Correct |
2671 ms |
161700 KB |
Output is correct |
14 |
Correct |
3891 ms |
169356 KB |
Output is correct |
15 |
Correct |
2098 ms |
166252 KB |
Output is correct |
16 |
Correct |
2041 ms |
166272 KB |
Output is correct |
17 |
Correct |
1940 ms |
160796 KB |
Output is correct |
18 |
Correct |
1938 ms |
160804 KB |
Output is correct |