Cod sursa(job #2754855)

Utilizator SteFUNGrigorescu Stefan Dumitru SteFUN Data 26 mai 2021 16:50:54
Problema Stramosi Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.79 kb
#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;
}