Pagini recente » Cod sursa (job #1215488) | Cod sursa (job #1125841) | Cod sursa (job #1424700) | Cod sursa (job #3152364) | Cod sursa (job #2648366)
#include <fstream>
#include <iostream>
#include <stack>
using namespace std ;
ifstream f ("scmax.in") ;
ofstream g ("scmax.out");
stack<int> rasp;
int n,mx_rasp = 1,v[100002],vector_final[100002],poz_in_vector_final[100002];
int cautare_binara(int nr,int lungime)
{
int st = 1,dr =lungime,mij,rasp =lungime+1;
while(st<=dr)
{
mij = (st+dr)/2;
if(vector_final[mij]>=nr)
{
rasp = mij;
dr = mij - 1;
}
else
if(vector_final[mij]<nr)
st = mij +1;
}
return rasp;
}
void afisare(int nr,int poz)
{
if(nr == 0)
return ;
for(int i = poz;;i--)
{
if(poz_in_vector_final[i] == nr)
{
afisare(nr-1,i-1);
g << v[i]<< " ";
return;
}
}
}
int main()
{
f >> n;
for(int i = 1; i<=n; i++)
{
f >> v[i];
}
int lungime = 1;
vector_final[1] = v[1];
poz_in_vector_final[1] = 1;
for(int i = 2;i<=n;i++)
{
int loc_in_vector_final = cautare_binara(v[i],mx_rasp);
cout << v[i]<<" " << loc_in_vector_final<< endl;
mx_rasp = max(mx_rasp,loc_in_vector_final);
vector_final[loc_in_vector_final] = v[i];
poz_in_vector_final[i] = loc_in_vector_final;
}
g<< mx_rasp<< endl;
afisare(mx_rasp,n);
return 0 ;
}