Cod sursa(job #2939151)
Utilizator | Prosie Radu-Teodor PHOSSESSED | Data | 13 noiembrie 2022 09:04:07 |
---|---|---|---|
Problema | Subsir crescator maximal | Scor | 50 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 1.14 kb |
#include<fstream>
#include<vector>
using namespace std;
const int NMAX = 1e5 + 2;
vector<int> info(NMAX,2e9),v(NMAX);
//d[i] = elementul la care se termina un subsir de lungime i
int bin(int val,int st,int dr)
{
int ans = 0;
while(st <= dr)
{
int mid = st + (dr - st) / 2;
if(info[mid] > val)
{
ans = mid;
dr = mid - 1;
}
else
{
st = mid + 1;
}
}
return ans;
}
int main()
{
ifstream cin("scmax.in");
ofstream cout("scmax.out");
int n; cin >> n;
info[0] = -2e9;
for(int i = 1; i <= n ; i++)
{
cin >> v[i];
int ant = bin(v[i],1,i);
if(info[ant - 1] < v[i] && info[ant] > v[i])
{
info[ant] = v[i];
}
}
int ans = 1;
for(int l = 1; l <= n ; l++)
{
if(info[l] != 2e9)
{
ans = l;
}
}
cout << (ans);
}