제출 #1223244

#제출 시각아이디문제언어결과실행 시간메모리
1223244GabrielNile (IOI24_nile)C++20
6 / 100
26 ms5964 KiB
#include "nile.h" #include "bits/stdc++.h" using namespace std; struct Artefacto{ long long Peso, a, b; }; bool operator<(const Artefacto& a, const Artefacto& b){ return a.a - a.b > b.a - b.b; } vector<Artefacto> Per__es_clave; vector< pair<long long, long long> > _rbol; vector<long long> Jaja; void Crear(long long i, long long d, long long p){ if(i == d){ Jaja[i] = p; _rbol[p] = {Per__es_clave[i].b - Per__es_clave[i].a, i}; return; } long long P = (i + d) / 2; Crear(i, P, p * 2); Crear(P + 1, d, p * 2 + 1); if(_rbol[p * 2].first > _rbol[p * 2 + 1].first) _rbol[p] = _rbol[p * 2]; else if(_rbol[p * 2].first < _rbol[p * 2 + 1].first) _rbol[p] = _rbol[p * 2 + 1]; else { if(_rbol[p * 2].second < _rbol[p * 2 + 1].second) _rbol[p] = _rbol[p * 2]; else _rbol[p] = _rbol[p * 2 + 1]; } } pair<long long, long long> Consulta(long long i, long long d, long long p, long long I, long long D){ if(D < I) return {-2, -2}; if(i >= I and d <= D) return _rbol[p]; if(i > D or d < I) return {-2, -2}; long long P = (i + d) / 2; auto _1 = Consulta(i, P, p * 2, I, D), _2 = Consulta(P + 1, d, p * 2 + 1, I, D); if(_1.first < _2.first) return _1; else if(_1.first > _2.first) return _2; else { if(_1.second < _2.second) return _1; else return _2; } } void Actualizar(long long p, long long o){ if(p == -0) return; if(p == o) _rbol[p].first = -2; else { if(_rbol[p * 2].first > _rbol[p * 2 + 1].first) _rbol[p] = _rbol[p * 2]; else if(_rbol[p * 2].first < _rbol[p * 2 + 1].first) _rbol[p] = _rbol[p * 2 + 1]; else { if(_rbol[p * 2].second < _rbol[p * 2 + 1].second) _rbol[p] = _rbol[p * 2]; else _rbol[p] = _rbol[p * 2 + 1]; } } Actualizar(p / 2, o); } vector<long long> calculate_costs(vector<int> w, vector<int> a, vector<int> b, vector<int> e) { int n = a.size(), q = e.size(); bool F_cil = 1; for(long long i = 0; i < n; i++){ Artefacto Nuevo; Nuevo.Peso = w[i]; if(w[i] != 1) F_cil = 0; Nuevo.a = a[i]; Nuevo.b = b[i]; Per__es_clave.push_back(Nuevo); } sort(Per__es_clave.begin(), Per__es_clave.end()); long long r = 0; if(F_cil){ for(long long i = 0; i < n; i++){ if(i + 1 == n) r += Per__es_clave[i].a; else r += Per__es_clave[i].b + Per__es_clave[i + 1].b; i++; } return vector<long long>(q, r); } long long Menor = 2222222222222222, Posici_n = 0; for(long long i = 0; i < n; i++){ if(Per__es_clave[i].a - Per__es_clave[i].b < Menor){ Menor = Per__es_clave[i].a - Per__es_clave[i].b; Posici_n = i; } r += Per__es_clave[i].b; } if(n % 2 == 0) return vector<long long>(q, r); else return vector<long long>(q, r - Per__es_clave[Posici_n].b + Per__es_clave[Posici_n].a); /*_rbol.assign(n * 4 + 22, {}); Jaja.assign(n, 0); for(long long i = 0; i < n; i++){ Artefacto Nuevo; Nuevo.Peso = w[i]; Nuevo.a = a[i]; Nuevo.b = b[i]; Per__es_clave.push_back(Nuevo); } sort(Per__es_clave.begin(), Per__es_clave.end()); Crear(0, n - 1, 1); vector<long long> Retorno; while(q--){ long long r = 0; vector<long long> Pareja(n, -2); } return Retorno;*/ }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...