Cod sursa(job #729553)

Utilizator SebiSebiPirtoaca George Sebastian SebiSebi Data 29 martie 2012 18:37:26
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include<iostream>
#include<fstream>
#include<algorithm>
using namespace std;
struct concert {
	int a,b;
};
concert v[100001];
int x[100001];
inline bool cmp(concert a, concert b)
{
	if(a.b==b.b)
		return a.a<b.a;
	else return a.b<b.b;
}
int cautarebinara(int p, int q, int a)
{
	int mij,poz;
	poz=-1;
	while(p<=q) {
		mij=(p+q)/2;
		if(x[mij]>a)
			q=mij-1;
		else if(x[mij]<a) {
			p=mij+1;
			poz=mij;
		}
		else {
			poz=mij;
			break;
		}
	}
	if(poz<=0)
		return poz;
	while(x[poz]==x[poz-1])
		poz--;
	return poz;
}
int main ()
{
	int n,i,k,j,poz,nr;
	ifstream f("planificare.in");
	ofstream g("planificare.out");
	f>>n>>k;
	for(i=1;i<=n;i++)
		f>>v[i].a>>v[i].b;
	f.close();
	sort(v+1,v+n+1,cmp);
	if(k>=n)
		g<<n;
	else {
		for(i=1;i<=k;i++)
			x[i]=v[i].b;
		nr=k;
		for( ;i<=n;i++) {
			poz=cautarebinara(1,k,v[i].a);
			if(poz>=1) {
				x[poz]=v[i].b;
				nr++;
			}
		}
		g<<nr;
	}
	g.close();
	return 0;
}