Cod sursa(job #2656716)
| Utilizator | Data | 8 octombrie 2020 15:32:22 | |
|---|---|---|---|
| Problema | Subsir crescator maximal | Scor | 0 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva educationala | Marime | 0.69 kb |
#include<bits/stdc++.h>
ifstream f("scmax.in");
ofstream g("scmax.out");
const int N=100100;
int n, i, A[N], P[N], V[N], D[N], lo, hi, mi, LM;
void print(int C);
int main()
{
f>>n;
for(i=1; i<=n; i++)
f>>A[i];
for(i=1; i<=n; i++)
{
lo=0;
hi=LM+1;
while(hi-lo>1)
{
mi=(lo+hi)/2;
if(V[mi]<A[i])lo=mi;
else hi=mi;
}
P[hi]=i;
V[hi]=A[i];
D[i]=P[lo];
if(hi>LM)
LM++;
}
g<<LM<<'\n';
print(P[LM]);
return 0;
}
void solve()
{
}
void print(int C)
{
if(!C)return;
print(D[C]);
g<<A[C]<<' ';
}
