// 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