il problema è la velocità, “Execution timed out” in tutte le sub task tranne i casi di esempio, qualcuno potrebbe aiutarmi a snellirlo e velocizzarlo?
#include <iostream>
#include <vector>
using namespace std;
#define MAXN 100000
#define MAXK 100000
int N, K;
vector<int>miglioriAmici(MAXN), puntiSolo(MAXN), puntiConAmico(MAXN);
int main()
{
freopen("input.txt", "r", stdin);
//freopen("output.txt", "w", stdout);
cin >> N >> K;
for(int i = 0; i != N; i++)
cin >> miglioriAmici[i] >> puntiSolo[i] >> puntiConAmico[i];
int bestP = puntiSolo[0], cnt = 0, container = 0, container2 = 0, res = 0;
do
{
for(int i = 0; i < puntiSolo.size(); ++i)
{
if(bestP < puntiSolo[i])
{
bestP = puntiSolo[i]; //bestP = puntiSolo[container]
container = i;
container2 = miglioriAmici[i];
}
}
int puntiCoppia = puntiConAmico[container] + puntiConAmico[miglioriAmici[container]]; //migliore attualmente + migliore amico del migliore attulmente considerando i punti insieme
if(puntiCoppia >= bestP && puntiCoppia >= puntiSolo[miglioriAmici[container]]) // se la somma dei punti dei migliori amici è maggiore dei punti di ogni elemento della coppia
{
res += puntiCoppia;
cnt += 2;
puntiSolo.erase(puntiSolo.begin() + container2);
puntiConAmico.erase(puntiConAmico.begin() + container2);
miglioriAmici.erase(miglioriAmici.begin() + container2);
}
else
{
res += bestP;
cnt += 1;
}
puntiSolo.erase(puntiSolo.begin() + container);
puntiConAmico.erase(puntiConAmico.begin() + container);
miglioriAmici.erase(miglioriAmici.begin() + container);
container = container2 = bestP = 0;
}
while(cnt != K);
cout << res << endl;
}