# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
384117 |
2021-03-31T13:30:45 Z |
doowey |
Teams (IOI15_teams) |
C++14 |
|
3507 ms |
142940 KB |
#include <bits/stdc++.h>
#include "teams.h"
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
#define fi first
#define se second
#define mp make_pair
const int N = (int)5e5 + 100;
const int T = (int)1e7 + 100;
struct node{
int val;
int lef;
int rig;
};
int cur;
node V[T];
int n;
vector<pii> segm;
vector<pii> segt;
int upd(int node, int cl, int cr, int id, int vv){
int cid = cur;
V[cid].lef = -1;
V[cid].rig = -1;
if(node == -1)
V[cid].val = 0;
else{
V[cid].val = V[node].val;
V[cid].lef = V[node].lef;
V[cid].rig = V[node].rig;
}
V[cid].val += vv;
cur ++ ;
if(cl == cr) return cid;
int mid = (cl + cr) / 2;
if(id <= mid){
int go = V[cid].lef;
V[cid].lef = upd(go, cl, mid, id, vv);
}
else{
int go = V[cid].rig;
V[cid].rig = upd(go, mid + 1, cr, id, vv);
}
return cid;
}
int get(int node, int cl, int cr, int tl, int tr){
if(cr < tl || cl > tr) return 0;
if(node == -1) return 0;
if(cl >= tl && cr <= tr){
return V[node].val;
}
int mid = (cl + cr) / 2;
return get(V[node].lef, cl, mid, tl, tr) + get(V[node].rig, mid + 1, cr, tl, tr);
}
int root[N];
void init(int _N, int A[], int B[]) {
n = _N;
for(int i = 0 ; i < n; i ++ ){
segm.push_back(mp(A[i], B[i]));
segt.push_back(mp(B[i], A[i]));
}
sort(segm.begin(), segm.end());
sort(segt.begin(), segt.end());
int iq = 0;
root[0] = -1;
int dash;
for(int i = 1; i <= n; i ++ ){
root[i] = root[i - 1];
while(iq < segt.size() && segt[iq].fi <= i){
dash = upd(root[i], 1, n, segt[iq].se, +1);
root[i] = dash;
iq ++ ;
}
}
}
const int C = 400;
ll dp[C];
ll low[C];
int compute(int lf, int rf){
return get(root[rf], 1, n, lf, rf);
}
int can(int M, int K[]) {
vector<int> lis;
int m = M;
for(int j = 0; j < m ; j ++ ){
lis.push_back(K[j]);
}
sort(lis.begin(), lis.end());
bool sol0 = true, sol1 = true;
if(m >= C){
ll cum = 0;
for(auto x : lis) cum += x;
if(cum > n) {
sol0=false;
return false;
}
priority_queue<int, vector<int>, greater<int>> cv;
int iq = 0;
for(auto x : lis){
while(iq < segm.size() && segm[iq].fi <= x){
cv.push(segm[iq].se);
iq ++ ;
}
while(!cv.empty() && cv.top() < x)
cv.pop();
if(cv.size() < x){
sol0=false;
break;
}
for(int j = 0 ; j < x; j ++ ){
cv.pop();
}
}
return sol0;
}
else { // by hall
ll comp;
for(int j = 0 ; j < m ; j ++ ){
dp[j] = n - lis[j] - compute(1, lis[j] - 1);
for(int i = 0; i < j ; i ++ ){
dp[j] = min(dp[j], dp[i] - lis[j] - compute(lis[i] + 1, lis[j] - 1));
}
comp = dp[j] - compute(lis[j] + 1, n);
if(comp < 0){
sol1=false;
break;
}
}
return sol1;
}
return sol0;
}
Compilation message
teams.cpp: In function 'void init(int, int*, int*)':
teams.cpp:80:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
80 | while(iq < segt.size() && segt[iq].fi <= i){
| ~~~^~~~~~~~~~~~~
teams.cpp: In function 'int can(int, int*)':
teams.cpp:114:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
114 | while(iq < segm.size() && segm[iq].fi <= x){
| ~~~^~~~~~~~~~~~~
teams.cpp:120:26: warning: comparison of integer expressions of different signedness: 'std::priority_queue<int, std::vector<int>, std::greater<int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
120 | if(cv.size() < x){
| ~~~~~~~~~~^~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
364 KB |
Output is correct |
2 |
Correct |
1 ms |
364 KB |
Output is correct |
3 |
Correct |
1 ms |
364 KB |
Output is correct |
4 |
Correct |
1 ms |
364 KB |
Output is correct |
5 |
Correct |
1 ms |
364 KB |
Output is correct |
6 |
Correct |
2 ms |
492 KB |
Output is correct |
7 |
Correct |
2 ms |
364 KB |
Output is correct |
8 |
Correct |
2 ms |
364 KB |
Output is correct |
9 |
Correct |
1 ms |
364 KB |
Output is correct |
10 |
Correct |
1 ms |
364 KB |
Output is correct |
11 |
Correct |
1 ms |
364 KB |
Output is correct |
12 |
Correct |
3 ms |
364 KB |
Output is correct |
13 |
Correct |
2 ms |
364 KB |
Output is correct |
14 |
Correct |
2 ms |
364 KB |
Output is correct |
15 |
Correct |
1 ms |
364 KB |
Output is correct |
16 |
Correct |
1 ms |
364 KB |
Output is correct |
17 |
Correct |
1 ms |
364 KB |
Output is correct |
18 |
Correct |
1 ms |
368 KB |
Output is correct |
19 |
Correct |
1 ms |
364 KB |
Output is correct |
20 |
Correct |
1 ms |
380 KB |
Output is correct |
21 |
Correct |
2 ms |
364 KB |
Output is correct |
22 |
Correct |
1 ms |
364 KB |
Output is correct |
23 |
Correct |
1 ms |
364 KB |
Output is correct |
24 |
Correct |
1 ms |
364 KB |
Output is correct |
25 |
Correct |
1 ms |
384 KB |
Output is correct |
26 |
Correct |
2 ms |
364 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
78 ms |
25180 KB |
Output is correct |
2 |
Correct |
76 ms |
25176 KB |
Output is correct |
3 |
Correct |
74 ms |
25176 KB |
Output is correct |
4 |
Correct |
79 ms |
26584 KB |
Output is correct |
5 |
Correct |
51 ms |
24920 KB |
Output is correct |
6 |
Correct |
55 ms |
24804 KB |
Output is correct |
7 |
Correct |
51 ms |
24792 KB |
Output is correct |
8 |
Correct |
49 ms |
24792 KB |
Output is correct |
9 |
Correct |
44 ms |
26200 KB |
Output is correct |
10 |
Correct |
44 ms |
25816 KB |
Output is correct |
11 |
Correct |
43 ms |
25688 KB |
Output is correct |
12 |
Correct |
42 ms |
25076 KB |
Output is correct |
13 |
Correct |
55 ms |
25176 KB |
Output is correct |
14 |
Correct |
54 ms |
25304 KB |
Output is correct |
15 |
Correct |
70 ms |
25176 KB |
Output is correct |
16 |
Correct |
70 ms |
25176 KB |
Output is correct |
17 |
Correct |
49 ms |
25432 KB |
Output is correct |
18 |
Correct |
52 ms |
25432 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
81 ms |
25816 KB |
Output is correct |
2 |
Correct |
82 ms |
25816 KB |
Output is correct |
3 |
Correct |
173 ms |
29272 KB |
Output is correct |
4 |
Correct |
79 ms |
26456 KB |
Output is correct |
5 |
Correct |
454 ms |
25432 KB |
Output is correct |
6 |
Correct |
1014 ms |
25432 KB |
Output is correct |
7 |
Correct |
56 ms |
25432 KB |
Output is correct |
8 |
Correct |
734 ms |
25432 KB |
Output is correct |
9 |
Correct |
44 ms |
26328 KB |
Output is correct |
10 |
Correct |
64 ms |
26288 KB |
Output is correct |
11 |
Correct |
236 ms |
26352 KB |
Output is correct |
12 |
Correct |
885 ms |
25944 KB |
Output is correct |
13 |
Correct |
280 ms |
25968 KB |
Output is correct |
14 |
Correct |
193 ms |
27608 KB |
Output is correct |
15 |
Correct |
176 ms |
25944 KB |
Output is correct |
16 |
Correct |
171 ms |
25816 KB |
Output is correct |
17 |
Correct |
312 ms |
26092 KB |
Output is correct |
18 |
Correct |
280 ms |
26072 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
504 ms |
134724 KB |
Output is correct |
2 |
Correct |
506 ms |
134596 KB |
Output is correct |
3 |
Correct |
806 ms |
142940 KB |
Output is correct |
4 |
Correct |
504 ms |
136388 KB |
Output is correct |
5 |
Correct |
2093 ms |
134844 KB |
Output is correct |
6 |
Correct |
3507 ms |
136832 KB |
Output is correct |
7 |
Correct |
279 ms |
136644 KB |
Output is correct |
8 |
Correct |
2583 ms |
137156 KB |
Output is correct |
9 |
Correct |
254 ms |
141508 KB |
Output is correct |
10 |
Correct |
506 ms |
139388 KB |
Output is correct |
11 |
Correct |
3030 ms |
140268 KB |
Output is correct |
12 |
Correct |
2247 ms |
136896 KB |
Output is correct |
13 |
Correct |
1093 ms |
138564 KB |
Output is correct |
14 |
Correct |
815 ms |
142916 KB |
Output is correct |
15 |
Correct |
707 ms |
139460 KB |
Output is correct |
16 |
Correct |
688 ms |
139844 KB |
Output is correct |
17 |
Correct |
921 ms |
138948 KB |
Output is correct |
18 |
Correct |
839 ms |
139144 KB |
Output is correct |