Pagini recente » Cod sursa (job #278352) | Cod sursa (job #736299) | Cod sursa (job #1693396) | Cod sursa (job #2526481) | Cod sursa (job #1090009)
#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)
{
rez+=arb[x];
x-=x & (-x);
}
return rez;
}
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,act;
for(int i=1; i<=n; i++)
{
act=que(x[i]-1);
if(act+1>max)
max=act+1;
add(x[i]);
}
printf("%d",max);
*/
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(i,lung+1);
}
printf("%d --- %d",max,iact);
return 0;
}