Cod sursa(job #523414)

Utilizator vladtarniceruVlad Tarniceru vladtarniceru Data 17 ianuarie 2011 22:34:18
Problema Subsir crescator maximal Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
# include <fstream>
  using namespace std;
    int n, Q[100100], cit, nr;
    int cb (int in, int sf, int find){
	    int ret = 0;
		while (in <= sf){
			int m = (in + sf) >> 1;
			if (Q[m] < find){
				ret = m;
				in = m + 1;
			}
			else
				sf = m - 1;
		}
		return (ret > 0 ? ret + 1 : 1);
	}
	int main (){
		std :: ifstream f ("scmax.in");
		std :: ofstream g ("scmax.out");
		f >> n;
		for (int i = 1; i <= n; ++i){
			f >> cit;
			int val = cb (1, nr, cit);
			if (Q[val] > cit || Q[val] == 0)
		        Q[val] = cit;
			if (nr < val) nr = val;
		}
		g << nr << '\n';
		for (int i = 1; i <= nr; ++i)
			g << Q[i] << ' ';
		g.close ();
		return 0;
	}