//#pragma GCC optimize("O3")
#include <bits/stdc++.h>
//#include "teams.h"
#define pii pair<int, int>
#define pll pair<long long, long long>
#define vii vector<pii>
#define vi vector<int>
#define pb push_back
#define mp make_pair
#define fi first
#define se second
using namespace std;
typedef long long ll;
const int INF = 1e9 + 7;
const int MAXN = 1e6 + 5;
int dp[MAXN];
int L[MAXN*50], R[MAXN*50], tree[MAXN*50];
int cnt = 0, m = 0, n = 0, root[MAXN*50];
vi pos, d, arr[MAXN];
int create(int k) {
int ret = cnt++;
tree[ret] = tree[k];
L[ret] = L[k], R[ret] = R[k];
return ret;
}
int qry(int l, int r, int k, int x, int y) {
if (y < l || r < x) return 0;
if (x <= l && r <= y)
return tree[k];
int mi = (l + r) / 2;
return qry(l, mi, L[k], x, y) + qry(mi + 1, r, R[k], x, y);
}
int upd(int l, int r, int k, int x, int v) {
if (r < x || x < l) return k;
int nk = create(k);
if (x <= l && r <= x) {
tree[nk] += v;
return nk;
}
int mi = (l + r) / 2;
L[nk] = upd(l, mi, L[nk], x, v);
R[nk] = upd(mi + 1, r, R[nk], x, v);
tree[nk] = tree[L[nk]] + tree[R[nk]];
return nk;
}
int build(int l, int r) {
int cur = cnt++;
if (l == r)
return cur;
int mi = (l + r) / 2;
L[cur] = build(l, mi);
R[cur] = build(mi + 1, r);
tree[cur] = tree[L[cur]] + tree[R[cur]];
return cur;
}
void init(int n, int a[], int b[]) {
::n = n;
for (int i = 0; i < n; i++)
arr[a[i] - 1].pb(b[i]);
root[n] = build(0, n+1);
for (int i = n - 1; i >= 0; i--) {
root[i] = root[i + 1];
for (int j: arr[i])
root[i] = upd(0, n+1, root[i], j, 1);
}
}
// index when y becomes more profitable than x
int gt(int x, int y) {
int lo = y, hi = m + 1;
while (lo < hi) { // find smallest index lo, s.t. dp[x] + students in interval (x,lo) >= dp[y] + students in interval (y,lo)
int mi = (lo + hi) / 2;
// a > k_x, b < k_mi; a > k_y, b < k_mi
if (dp[x] + qry(0, n+1, root[pos[x]], 0, pos[mi] - 1) >= dp[y] + qry(0, n+1, root[pos[y]], 0, pos[mi] - 1))
hi = mi;
else
lo = mi + 1;
}
return lo;
}
int can(int m, int k[]) {
::m = m;
pos = {0};
for (int i = 0; i < m; i++)
pos.pb(k[i]);
sort(pos.begin(), pos.end());
d.clear();
int curCnt = 0;
for (int i = 0; i <= m; i++) {
if (i > 0) {
while (d.size() > 1 && gt(d[d.size()-2], d.back()) <= i)
d.pop_back();
dp[i] = dp[d.back()] + qry(0, n+1, root[pos[d.back()]], 0, pos[i] - 1) + pos[i];
}
curCnt = max(curCnt, dp[i] + qry(0, n+1, root[pos[i]], 0, n));
if (curCnt > n)
return 0;
while (d.size() > 1 && gt(d[d.size()-2], d.back()) <= gt(d.back(), i))
d.pop_back();
d.pb(i);
}
return 1;
}
Compilation message
teams.cpp: In function 'void init(int, int*, int*)':
teams.cpp:61:34: warning: declaration of 'n' shadows a global declaration [-Wshadow]
void init(int n, int a[], int b[]) {
^
teams.cpp:18:21: note: shadowed declaration is here
int cnt = 0, m = 0, n = 0, root[MAXN*50];
^
teams.cpp: In function 'int can(int, int*)':
teams.cpp:87:23: warning: declaration of 'm' shadows a global declaration [-Wshadow]
int can(int m, int k[]) {
^
teams.cpp:18:14: note: shadowed declaration is here
int cnt = 0, m = 0, n = 0, root[MAXN*50];
^
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
28 ms |
23808 KB |
Output is correct |
2 |
Correct |
27 ms |
23808 KB |
Output is correct |
3 |
Correct |
30 ms |
23808 KB |
Output is correct |
4 |
Correct |
26 ms |
23808 KB |
Output is correct |
5 |
Correct |
25 ms |
23800 KB |
Output is correct |
6 |
Correct |
30 ms |
24036 KB |
Output is correct |
7 |
Correct |
28 ms |
23800 KB |
Output is correct |
8 |
Correct |
26 ms |
23928 KB |
Output is correct |
9 |
Correct |
30 ms |
23936 KB |
Output is correct |
10 |
Correct |
25 ms |
23908 KB |
Output is correct |
11 |
Correct |
31 ms |
23928 KB |
Output is correct |
12 |
Correct |
29 ms |
23808 KB |
Output is correct |
13 |
Correct |
26 ms |
23936 KB |
Output is correct |
14 |
Correct |
26 ms |
23948 KB |
Output is correct |
15 |
Correct |
26 ms |
23820 KB |
Output is correct |
16 |
Correct |
29 ms |
23908 KB |
Output is correct |
17 |
Correct |
30 ms |
23800 KB |
Output is correct |
18 |
Correct |
26 ms |
23808 KB |
Output is correct |
19 |
Correct |
30 ms |
23800 KB |
Output is correct |
20 |
Correct |
29 ms |
23888 KB |
Output is correct |
21 |
Correct |
25 ms |
23896 KB |
Output is correct |
22 |
Correct |
27 ms |
23896 KB |
Output is correct |
23 |
Correct |
30 ms |
23808 KB |
Output is correct |
24 |
Correct |
25 ms |
23808 KB |
Output is correct |
25 |
Correct |
25 ms |
23936 KB |
Output is correct |
26 |
Correct |
27 ms |
23928 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
164 ms |
49940 KB |
Output is correct |
2 |
Correct |
152 ms |
50008 KB |
Output is correct |
3 |
Correct |
157 ms |
49912 KB |
Output is correct |
4 |
Correct |
156 ms |
51064 KB |
Output is correct |
5 |
Correct |
77 ms |
48780 KB |
Output is correct |
6 |
Correct |
66 ms |
48900 KB |
Output is correct |
7 |
Correct |
74 ms |
48860 KB |
Output is correct |
8 |
Correct |
81 ms |
48888 KB |
Output is correct |
9 |
Correct |
390 ms |
49668 KB |
Output is correct |
10 |
Correct |
207 ms |
49392 KB |
Output is correct |
11 |
Correct |
72 ms |
49136 KB |
Output is correct |
12 |
Correct |
73 ms |
49096 KB |
Output is correct |
13 |
Correct |
72 ms |
49268 KB |
Output is correct |
14 |
Correct |
88 ms |
49520 KB |
Output is correct |
15 |
Correct |
125 ms |
49912 KB |
Output is correct |
16 |
Correct |
130 ms |
49984 KB |
Output is correct |
17 |
Correct |
75 ms |
49204 KB |
Output is correct |
18 |
Correct |
68 ms |
49252 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
141 ms |
50268 KB |
Output is correct |
2 |
Correct |
166 ms |
50424 KB |
Output is correct |
3 |
Correct |
335 ms |
53368 KB |
Output is correct |
4 |
Correct |
138 ms |
51064 KB |
Output is correct |
5 |
Correct |
266 ms |
49208 KB |
Output is correct |
6 |
Correct |
312 ms |
49220 KB |
Output is correct |
7 |
Correct |
91 ms |
49220 KB |
Output is correct |
8 |
Correct |
220 ms |
49232 KB |
Output is correct |
9 |
Correct |
349 ms |
49792 KB |
Output is correct |
10 |
Correct |
897 ms |
49868 KB |
Output is correct |
11 |
Correct |
686 ms |
49520 KB |
Output is correct |
12 |
Correct |
544 ms |
49584 KB |
Output is correct |
13 |
Correct |
540 ms |
49900 KB |
Output is correct |
14 |
Correct |
486 ms |
52104 KB |
Output is correct |
15 |
Correct |
307 ms |
50668 KB |
Output is correct |
16 |
Correct |
281 ms |
50808 KB |
Output is correct |
17 |
Correct |
271 ms |
49656 KB |
Output is correct |
18 |
Correct |
278 ms |
49780 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1065 ms |
168596 KB |
Output is correct |
2 |
Correct |
998 ms |
168476 KB |
Output is correct |
3 |
Correct |
1669 ms |
174352 KB |
Output is correct |
4 |
Correct |
982 ms |
169588 KB |
Output is correct |
5 |
Correct |
928 ms |
162252 KB |
Output is correct |
6 |
Correct |
983 ms |
162208 KB |
Output is correct |
7 |
Correct |
250 ms |
162296 KB |
Output is correct |
8 |
Correct |
778 ms |
162424 KB |
Output is correct |
9 |
Correct |
2526 ms |
164156 KB |
Output is correct |
10 |
Correct |
2268 ms |
161972 KB |
Output is correct |
11 |
Correct |
1763 ms |
161992 KB |
Output is correct |
12 |
Correct |
1378 ms |
162008 KB |
Output is correct |
13 |
Correct |
2225 ms |
163604 KB |
Output is correct |
14 |
Correct |
1869 ms |
170644 KB |
Output is correct |
15 |
Correct |
1061 ms |
167432 KB |
Output is correct |
16 |
Correct |
1196 ms |
167456 KB |
Output is correct |
17 |
Correct |
868 ms |
162448 KB |
Output is correct |
18 |
Correct |
788 ms |
162444 KB |
Output is correct |