Pagini recente » Cod sursa (job #25358) | Cod sursa (job #1779434) | Cod sursa (job #2847411) | Cod sursa (job #479347) | Cod sursa (job #380478)
Cod sursa(job #380478)
#include<fstream>
#define inf "scmax.in"
#define outf "scmax.out"
#define NMax 100001
#define PINF 0x3f3f3f3f
using namespace std;
fstream f(inf,ios::in),g(outf,ios::out);
int N;
int v[NMax],S[NMax],L[NMax];
void Citire()
{
f>>N;
for(int i=1;i<=N;i++)f>>v[i];
}
int cauta(int st,int dr,int num)
{
int mij,poz=PINF;
int gasit=0;
while(st<=dr)
{
mij=(st+dr)/2;
if(S[mij]>=num)
{
if(poz>mij)poz=mij;
dr=mij-1;
gasit=1;
}
else if(S[mij]<num)st=mij+1;
}
if(gasit==1)return poz;
return -1;
}
void Rezolva()
{
int p;
int nr=1;
S[nr]=v[1];
L[1]=1;
for(int i=2;i<=N;i++)
{
p=cauta(1,nr,v[i]);
if(p==-1)
{
S[++nr]=v[i];
L[i]=nr;
}
else
{
S[p]=v[i];
L[i]=p;
}
}
g<<nr;
}
int main()
{
Citire();
Rezolva();
f.close();
g.close();
return 0;
}