Pagini recente » Cod sursa (job #2417200) | Cod sursa (job #824821) | Cod sursa (job #1632335) | Cod sursa (job #2678057) | Cod sursa (job #1090015)
#include <cstdio>
#include <algorithm>
const int Q=100000;
int n,v[Q+1],w[Q+1],x[Q+1];
bool cmp(int x, int y)
{
return v[x]<v[y];
}
int arb[Q+1];
bool fact[Q+1];
int ask(int x)
{
int rez=0;
while(x)
{
if(arb[x]>rez)
rez=arb[x];
x-=x & (-x);
}
return rez+1;
}
void update(int x, int val)
{
while(x<=n)
{
arb[x]=val ;
x += x &(-x);
}
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
//int x;
for(int i=1; i<=n; i++)
{
scanf("%d",&v[i]);
w[i]=i;
}
std::sort(w+1,w+n+1,cmp);
for(int i=1; i<=n; i++)
{
if( v[w[i]] == v[w[i-1]] )
{
//printf("?");
x[w[i]]=x[w[i-1]];
}
else
x[w[i]]=i;
}
int max=0,lung,iact;
for(int i=1; i<=n; i++)
{
lung=ask(x[i]-1);
if(lung>max)
{
max=lung;
iact=i;
}
update(x[i],lung);
}
printf("%d --- %d",max,iact);
return 0;
}