Pagini recente » Cod sursa (job #2264824) | Cod sursa (job #1964060) | Cod sursa (job #1028712) | Cod sursa (job #1661263) | Cod sursa (job #3291317)
#include <fstream>
#include <map>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int n, cnt, ans;
int v[100005];
int aib[100005];
map<int, int> mp;
void update(int poz, int val)
{
for(int i = poz; i<=cnt; i+=(i&-i))
{
aib[i] = max(aib[i], val);
}
}
int query(int poz)
{
int ans = 0;
for(int i = poz; i>=1; i-=(i&-i))
{
ans = max(ans, aib[i]);
}
return ans;
}
int main()
{
in>>n;
for(int i = 1; i<=n; i++)
{
in>>v[i];
mp[v[i]] = 1;
}
for(auto &it: mp)
{
cnt++;
it.second = cnt;
}
for(int i = 1; i<=n; i++)
{
v[i] = mp[v[i]];
//out<<v[i]<<" ";
}
for(int i = 1; i<=n; i++)
{
int best = query(v[i] - 1) + 1;
update(v[i], best);
ans = max(ans, best);
}
out<<ans<<'\n';
return 0;
}