# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
619850 |
2022-08-02T16:32:57 Z |
someone |
Teams (IOI15_teams) |
C++14 |
|
4000 ms |
50548 KB |
#include "teams.h"
#include <bits/stdc++.h>
using namespace std;
struct Node {
int deb, fin, val, l = -1, r = -1;
};
const int N = 1 << 19;
vector<Node> node;
vector<int> posFin[N];
pair<int, int> inter[N];
int n, root[N], nbFin[N], nbDeb[N];
int nodeCopy(int id) {
int i = node.size();
node.push_back(node[id]);
return i;
}
int newNode(int deb, int fin) {
int i = node.size();
node.push_back({deb, fin, 0});
return i;
}
int add(int i, int pos) {
if(pos < node[i].deb || node[i].fin <= pos)
return i;
i = nodeCopy(i);
node[i].val++;
if(node[i].fin - node[i].deb == 1)
return i;
int mid = (node[i].deb + node[i].fin) / 2;
if(node[i].l == -1) {
int x = newNode(node[i].deb, mid);
node[i].l = x;
}
if(node[i].r == -1) {
int x = newNode(mid, node[i].fin);
node[i].r = x;
}
int left = add(node[i].l, pos),
right = add(node[i].r, pos);
node[i].l = left, node[i].r = right;
return i;
}
int getSum(int i, int deb, int fin) {
if(i == -1)
return 0;
if(deb <= node[i].deb && node[i].fin <= fin)
return node[i].val;
if(fin <= node[i].deb || node[i].fin <= deb)
return 0;
return getSum(node[i].l, deb, fin) + getSum(node[i].r, deb, fin);
}
int getId(int i, int search) {
if(node[i].fin - node[i].deb == 1)
return node[i].deb;
if(node[i].l == -1)
return getId(node[i].r, search);
if(search <= node[node[i].l].val)
return getId(node[i].l, search);
return getId(node[i].r, search - node[node[i].l].val);
}
void init(int X, int A[], int B[]) {
n = X;
for(int i = 0; i < n; i++)
inter[i] = {A[i], B[i]};
sort(inter, inter + n);
/*
n = X;
for(int i = 0; i < n; i++) {
B[i]++;
nbDeb[A[i]]++;
nbFin[B[i]]++;
posFin[A[i]].push_back(B[i]);
}
for(int i = 1; i < N; i++) {
nbDeb[i] += nbDeb[i-1];
nbFin[i] += nbFin[i-1];
}
root[0] = 0;
node.push_back({0, N, 0});
for(int i = 1; i <= n; i++) {
root[i] = root[i-1];
for(int j : posFin[i])
root[i] = add(root[i], j);
}*/
}
int can(int m, int k[]) {
sort(k, k + m);
int id = 0;
multiset<int> fin;
for(int i = 0; i < m; i++) {
while(id < n && inter[id].first <= k[i]) {
fin.insert(inter[id].second);
id++;
}
int nb = k[i];
while(!fin.empty() && nb) {
auto it = fin.begin();
if((*it) >= k[i])
nb--;
fin.erase(it);
}
if(nb > 0)
return 0;
}
return 1;
/*
sort(k, k + m);
int preK = 0, last = 0, nbPre = 0;
for(int i = 0; i < m; i++) {
//trouver cb d'intervalles qu'on aurait pu prendre ont ete pris
int taken = getSum(root[preK], k[i]+1, last);
if(last >= k[i]+1)
taken += nbPre;
//l'id du dernier pris (1-indexed)
int id = nbFin[k[i]] + taken + k[i];
if(id > nbDeb[k[i]])
return 0;
//trouver le dernier pris
last = getId(root[k[i]], id);
nbPre = id - getSum(root[k[i]], 0, last);
preK = k[i];
}
return 1;*/
}
Compilation message
teams.cpp: In function 'int nodeCopy(int)':
teams.cpp:17:22: warning: conversion from 'std::vector<Node>::size_type' {aka 'long unsigned int'} to 'int' may change value [-Wconversion]
17 | int i = node.size();
| ~~~~~~~~~^~
teams.cpp: In function 'int newNode(int, int)':
teams.cpp:23:22: warning: conversion from 'std::vector<Node>::size_type' {aka 'long unsigned int'} to 'int' may change value [-Wconversion]
23 | int i = node.size();
| ~~~~~~~~~^~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
6 ms |
12628 KB |
Output is correct |
2 |
Correct |
7 ms |
12616 KB |
Output is correct |
3 |
Correct |
7 ms |
12628 KB |
Output is correct |
4 |
Correct |
7 ms |
12616 KB |
Output is correct |
5 |
Correct |
7 ms |
12640 KB |
Output is correct |
6 |
Correct |
8 ms |
12628 KB |
Output is correct |
7 |
Correct |
7 ms |
12628 KB |
Output is correct |
8 |
Correct |
8 ms |
12616 KB |
Output is correct |
9 |
Correct |
7 ms |
12628 KB |
Output is correct |
10 |
Correct |
8 ms |
12636 KB |
Output is correct |
11 |
Correct |
7 ms |
12628 KB |
Output is correct |
12 |
Correct |
8 ms |
12628 KB |
Output is correct |
13 |
Correct |
8 ms |
12620 KB |
Output is correct |
14 |
Correct |
8 ms |
12628 KB |
Output is correct |
15 |
Correct |
8 ms |
12628 KB |
Output is correct |
16 |
Correct |
11 ms |
12628 KB |
Output is correct |
17 |
Correct |
7 ms |
12532 KB |
Output is correct |
18 |
Correct |
7 ms |
12628 KB |
Output is correct |
19 |
Correct |
9 ms |
12628 KB |
Output is correct |
20 |
Correct |
7 ms |
12620 KB |
Output is correct |
21 |
Correct |
9 ms |
12628 KB |
Output is correct |
22 |
Correct |
10 ms |
12628 KB |
Output is correct |
23 |
Correct |
9 ms |
12628 KB |
Output is correct |
24 |
Correct |
8 ms |
12632 KB |
Output is correct |
25 |
Correct |
7 ms |
12512 KB |
Output is correct |
26 |
Correct |
8 ms |
12580 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
22 ms |
15292 KB |
Output is correct |
2 |
Correct |
22 ms |
15296 KB |
Output is correct |
3 |
Correct |
49 ms |
19568 KB |
Output is correct |
4 |
Correct |
26 ms |
15828 KB |
Output is correct |
5 |
Correct |
25 ms |
14888 KB |
Output is correct |
6 |
Correct |
32 ms |
15052 KB |
Output is correct |
7 |
Correct |
17 ms |
14932 KB |
Output is correct |
8 |
Correct |
18 ms |
14960 KB |
Output is correct |
9 |
Correct |
35 ms |
19864 KB |
Output is correct |
10 |
Correct |
35 ms |
19472 KB |
Output is correct |
11 |
Correct |
34 ms |
19436 KB |
Output is correct |
12 |
Correct |
37 ms |
19152 KB |
Output is correct |
13 |
Correct |
38 ms |
17844 KB |
Output is correct |
14 |
Correct |
40 ms |
19792 KB |
Output is correct |
15 |
Correct |
23 ms |
15836 KB |
Output is correct |
16 |
Correct |
22 ms |
15308 KB |
Output is correct |
17 |
Correct |
31 ms |
16528 KB |
Output is correct |
18 |
Correct |
31 ms |
16488 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
28 ms |
16092 KB |
Output is correct |
2 |
Correct |
31 ms |
16204 KB |
Output is correct |
3 |
Execution timed out |
4083 ms |
20276 KB |
Time limit exceeded |
4 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
96 ms |
28596 KB |
Output is correct |
2 |
Correct |
100 ms |
28624 KB |
Output is correct |
3 |
Execution timed out |
4029 ms |
50548 KB |
Time limit exceeded |
4 |
Halted |
0 ms |
0 KB |
- |