Cod sursa(job #2613793)

Utilizator kosasDimitrie kosas Data 10 mai 2020 17:46:37
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.44 kb
//============================================================================
// Name        : cautareBinara.cpp
// Author      : 
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================

#include <iostream>
#include <fstream>
#include <vector>
#include <utility>

using namespace std;

class Solution
{
	private:
		vector <uint32_t> series;
		uint32_t N, M, x, t;
		ifstream inFile;
		ofstream outFile;
		vector <pair<uint32_t, uint32_t>> questions;

		int findX(uint32_t start, uint32_t stop){
			int pos = -1;
			if(start >= stop)
			{
				if(series[start] == x)
					pos = start;
			}
			else
			{
				int middle = (stop + start) / 2;
				//search right first to get the biggest position of x
				pos = findX(middle + 1, stop);
				if(pos == -1)
					pos = findX(start,middle);
			}
			return pos;
		}
	public:
		Solution()
		{
			N=0,M=0,x=0,t=0;
		}

		int readSolutionParameters(string fileName){
			int ret = 0;
			uint32_t i = 0;
			inFile.open (fileName, ifstream::in);
			if(!inFile.eof())
			{
				inFile >> N;
				for(i = 0; i < N; ++i)
				{
					inFile >> x;
					series.push_back(x);
				}
				inFile >> M;
				for(i = 0; i < M; ++i)
				{
					inFile >> t >> x;
					questions.push_back(make_pair(t,x));
				}
				inFile.close();
			}else
			{
				ret = -1;
			}
			return ret;
		}

		void printSolutionParameters(string fileName)
		{
			uint32_t i = 0;
			outFile.open (fileName, ofstream::out);
			outFile << N << endl;
			for(i = 0; i < N; ++i)
			{
				outFile << series[i]<<' ';
			}
			outFile << endl << M << endl;
			for(i = 0; i < M; ++i)
			{
				outFile << questions[i].first << ' ' << questions[i].second << endl;
			}
			outFile << endl;
		}

		void answer(string fileName)
		{
			outFile.open (fileName, ofstream::out);
			uint32_t i = 0;
			int pos = -1;
			uint32_t qType = 0;
			for(i = 0; i < M; ++i)
			{
				qType = questions[i].first;
				x = questions[i].second;
				pos = findX(0, series.size() -1);
				if(pos != -1)
				{
					if (qType == 1)
					{
						pos--;
					}else if (qType ==2)
					{
						pos++;
					}
				}
				outFile << pos<<endl;
			}
			outFile.close();
		}

		~Solution()
		{
		}
};
int main() {
	int ret = 0;
	Solution s;
	ret = s.readSolutionParameters("cautbin.in");
	if (ret == -1)
	{
		printf("File error\n");
	}
	//s.printSolutionParameters("cautbin.out");
	s.answer("cautbin.out");
	return ret;
}