Pagini recente » Cod sursa (job #128907) | Cod sursa (job #3221497) | Cod sursa (job #1742220) | Cod sursa (job #1095856) | Cod sursa (job #2180995)
#include <bits/stdc++.h>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int n, aux;
int arr[100005];
int d[100005]; /// D[I] = CEA MAI MICA VALOARE PE CARE SE POATE TERMINA UN SUBSIR DE LUNGIME I
int s[100005];
int t[100005];
int cautare_binara( int st, int dr, int val )
{
int mid;
while( st <= dr )
{
mid = (st + dr)/2;
if( d[mid] == 0 )
dr = mid - 1;
else
if( d[mid] >= val )
dr = mid - 1;
else
st = mid + 1;
}
return (dr + 1);
}
int st, dr, mid;
int main()
{
in>>n;
for( int i = 1; i <= n; i++ )
in>>arr[i];
d[1] = arr[1];
t[1] = -1;
s[1] = 1;
for( int i = 2; i <= n; i++ )
{
aux = cautare_binara( 1, n, arr[i] );
if( aux == 1 )
t[ arr[i] ] = -1;
else
t[ arr[i] ] = d[aux - 1];
d[aux] = arr[i];
s[aux]++;
}
st = 1;
dr = n;
while( st <= dr )
{
mid = (st + dr)/2;
if( d[mid] > 0 )
st = mid + 1;
else
dr = mid - 1;
}
return 0;
}