Cod sursa(job #205065)

Utilizator IrnukIrina Grosu Irnuk Data 28 august 2008 21:36:34
Problema Marbles Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
/*marbles - infoarena*/


#include<fstream.h>

long n,m,ver[70],maxim,pozi,pozj,max;
 
struct o
{
	long cord,poz;
}v[100005],pivot;

ifstream fin("marbles.in");
ofstream fout("marbles.out");

void citire()
{
	long i;
	fin>>n>>m;
	for(i=0;i<n;i++)
	   	fin>>v[i].cord>>v[i].poz;
}

void fa(long pozi,long pozj)
{
	long i;
	for(i=0;i<=max;i++)
		ver[i]=0;
	max=0;
	i=0;
	while(v[i].cord<pozi)i++;
	while(v[i].cord<=pozj)
	{
		if(max<v[i].poz)
			max=v[i].poz;
		ver[v[i].poz]++;
		i++;
	}
	maxim=0;
	for(i=1;i<=max;i++)
		if(maxim<ver[i])
			maxim=ver[i];
	fout<<maxim<<'\n';
	
}
void pivotare(long i,long j,long &m)
{

	pivot=v[i];

	while(i<j)
	{
		while(j>i && v[j].cord>=pivot.cord) j--;
		v[i]=v[j];
		while(i<j && v[i].cord<=pivot.cord) i++; 
		v[j]=v[i];
	}
	v[i]=pivot;
	m=i;
}

void quick_sort(long p,long q)
{
	long m;

	if(p<q)
	{
		pivotare(p,q,m); 

		quick_sort(p,m-1);
	
		quick_sort(m+1,q);
	}

}

int main()
{
	long indice,j;
	long i,pozi,pozj;

	citire();
	quick_sort(0,n-1);
	for(i=0;i<m;i++)
	{
		fin>>indice>>pozi>>pozj;
		if(indice==0)
		{
			j=0;
			while(v[j].cord!=pozi) j++;
			v[j].cord=pozi+pozj;
		}
		else
			fa(pozi,pozj);

	}

	fout.close();
	return 0;
}