// UVa 231 - Testing the CATCHER #include <iostream> #include <string.h> using namespace std; int T[65566]; void insert(int h, int s) { int n = 32768 + h; while (n > 0 && s > T[n]) { T[n] = s; n = n / 2; } } int find(int ini, int fin, int n, int h1, int h2) { if (ini == h1 && fin == h2) return T[n]; int mid = (ini + fin) / 2; if (h2 <= mid) return find(ini, mid, 2 * n, h1, h2); if (h1 > mid) return find(mid + 1, fin, 2 * n + 1, h1, h2); int b1 = find(ini, mid, 2 * n, h1, mid); int b2 = find(mid + 1, fin, 2 * n + 1, mid + 1, h2); return max(b1, b2); } int main() { int h, cases = 0; cin >> h; while (h != -1) { cases++; memset(T, 0, sizeof(T)); int sol = 0; do { int b = find(0, 32767, 1, h, 32767); insert(h, b + 1); if (b > sol) sol = b; cin >> h; } while (h != -1); if (cases > 1) cout << endl; cout << "Test #" << cases << ":" << endl; cout << " maximum possible interceptions: " << sol + 1 << endl; cin >> h; } return 0; }
Sunday, June 7, 2015
UVa 231 - Testing the CATCHER
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment