Pagini recente » Cod sursa (job #2245203) | Cod sursa (job #1053972) | Cod sursa (job #655481) | Cod sursa (job #293988) | Cod sursa (job #1328592)
/// scmax
#include <iostream>
#include <fstream>
#define inf (1<<30)+100
#define NMax 100005
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n;
int A[NMax];
int best[NMax];
int prev[NMax];
void solve() {
for (int i=1;i<=n;i++) {
best[i] = inf;
prev[i] = -1;
}
best[0] = -1;
prev[0] = -1;
for (int i=1;i<=n;i++) {
int x = A[i];
int left = 0, right = i+1;
while (right-left-1) {
int mij = (left+right)/2;
if (best[mij] < x)
left = mij;
else
right = mij;
}
if (best[right] > x) {
best[right] = x;
}
}
int left = 0, right = n+1;
while (right-left-1) {
int mij = (left+right)/2;
if (best[mij] < inf)
left = mij;
else
right = mij;
}
int len = left;
g<<len<<'\n'; /// Primul raspuns
}
void read() {
f>>n;
for (int i=1;i<=n;i++)
f>>A[i];
}
int main() {
read();
solve();
f.close(); g.close();
return 0;
}