# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
723391 | mimmocostes | Measures (CEOI22_measures) | C++14 | 0 ms | 0 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
int N, M;
long long D;
string half (long long N) {
if (N%2 == 0) {
return to_string(N/2);
} else {
return to_string(N/2)+".5";
}
}
struct Personne {
long long position;
bool initiale;
int ordre;
bool operator< (Personne b) {
return position < b.position;
};
};
vector<Personne> personnes;
vector<int> a_ajouter;
struct Noeud;
struct Noeud {
long long mini = INT_MAX,
maxi = 0;
long long calc = INT_MAX;
long long shift = 0;
}
struct Arbre {
vector<Noeud> noeuds;
void init (int N) {
int nbNoeuds = 1<<ceil(log2(N));
noeuds.resize(nbNoeuds*2-1);
int nbGauche = 0;
for (int i=0; i<N; i++) {
if (personnes[nbNoeuds-1+i].initiale) {
noeuds[i].mini = personnes[nbNoeuds-1+i].
noeuds[i].maxi = personnes[nbNoeuds-1+i].
noeuds[i].calc = nbGauche;
nbGauche++;
}
}
int k=2;
while (k<=N) {
for (int i=0; i<N; i+=k) {
int g = get_filsgauche();
}
k *= 2;
}
}
Noeud fusion (Noeud gauche, Noeud droite, Noeud parent) {
parent.mini = min(gauche.mini, droite.mini);
parent.maxi = max(gauche.maxi, droite.maxi);
parent.calc = max();
return parent;
}
int get_depth (int N) {
return floor(log2(N+1));
}
int get_filsgauche (int N) {
int depth = get_depth(N);
int offset = 1<<depth -1;
int pos = N - offset;
return 1<<(depth+1) -1 +offset/2;
}
int get_parent (int N) {
if (N==0) return 0;
int depth = get_depth(N);
int offset = 1<<depth -1;
int pos = N - offset;
return 1<<(depth-1) -1 +offset*2;
}
};
int main () {
cin >> N >> M >> D;
personnes.resize(N+M);
for (int i=0; i<N; i++) {
cin >> personnes[i].position;
personnes[i].initiale = true;
}
for (int i=0; i<M; i++) {
cin >> personnes[i].position;
personnes[i].initiale = false;
personnes[i].ordre = i;
}
sort(personnes.begin(), personnes.end());
a_ajouter.resize(M);
for (int i=0; i<N+M; i++) {
if (!personnes[i].initiale) {
a_ajouter[personnes[i].ordre] = i;
}
}
// for (int k=0; k<M; k++) {
// initial.push_back(added[k]);
// sort(initial.begin(), initial.end());
// long long M = 0;
// for (long long i=0; i<N+k+1; i++) {
// for (long long j=i+1; j<N+k+1; j++) {
// M = max(M, D*(j-i) - (initial[j]-initial[i]));
// }
// }
// cout << half(M) << endl;
// }
}