Pagini recente » Cod sursa (job #1725990) | Cod sursa (job #592000) | Cod sursa (job #1428732) | Cod sursa (job #1882502) | Cod sursa (job #2754855)
#include <iostream>
#include <fstream>
#include <vector>;
std::ifstream f("stramosi.in");
std::ofstream g("stramosi.out");
typedef std::pair<int, int> pair_ints;
//
//struct cmp_pt_skipVector
//{
// bool operator ()(pair_ints a, pair_ints b)
// {
// return a.first < b.first;
// }
//};
struct membru
{
int stramos = 0;
std::vector<pair_ints> skipStramosOrdin;
}membrii[250001];
void insertionSort(std::vector<pair_ints> v) // il folosim doar pt ultimul elem din vector practic
{
int ind = v.size() - 1;
while (ind > 0)
{
if (v[ind].first < v[ind - 1].first)
{
std::swap(v[ind], v[ind - 1]);
ind--;
}
else
break;
}
}
//int stramos[250001];
//int skipStramos[250001];
//int skipOrdin[250001];
int main()
{
int n, m, i, j;
f >> n >> m;
for (i = 1; i <= n; i++)
f >> membrii[i].stramos;
int membru, ordin; // membrul si ordinul stramosului cautat
int intermediar, cordin; // stramos intermediar si copie ordin
for (j = 1; j <= m; j++)
{
f >> membru >> ordin;
intermediar = membru;
cordin = ordin;
while (ordin)
{
int dim = membrii[intermediar].skipStramosOrdin.size();
while (dim > 0)
{
if (membrii[intermediar].skipStramosOrdin[dim - 1].second <= ordin)
{
ordin = ordin - membrii[intermediar].skipStramosOrdin[dim - 1].second;
intermediar = membrii[intermediar].skipStramosOrdin[dim - 1].first;
break;
}
dim--;
}
if(dim == 0)
{
intermediar = membrii[intermediar].stramos;
ordin--;
}
}
membrii[membru].skipStramosOrdin.push_back({ intermediar, cordin });
insertionSort(membrii[membru].skipStramosOrdin);
//skipStramos[membru] = intermediar;
//skipOrdin[membru] = cordin;
g << intermediar << " ";
}
return 0;
}