#include #include #include #include #include #include // #include using namespace std; int main() { int N, M, A, B, T; vector a, b, prefix; string op, fun; while (scanf("%d", &M) == 1) { a.clear(); b.clear(); prefix.clear(); int sum = 0; N = M; while(N--) { scanf("%d%d", &A, &B); a.push_back(A); b.push_back(B); sum += B; prefix.push_back(sum); // printf("prefix: %d\n", sum); } scanf("%d", &N); while (N--) { cin >> op >> fun >> T; multiset s; int j = 0; int count = 0; // printf("T: %d\n", T); for(int i = 0; i < M; ++i) { if (i != j) { while(a[i] - a[j] > T && i > j) { // printf("erasing = i: %d j: %d b[j]: %d\n", i, j, b[j]); s.erase(s.find(b[j])); ++j; } if (!s.empty()) { double val; if ( fun == "min") { val = *s.begin(); } if ( fun == "max" ) { val = *s.rbegin(); } if ( fun == "avg" ) { int before; before = j == 0 ? 0 : prefix[j - 1]; val = (double) (prefix[i] - before - b[i]) / (double) (i - j); } // printf("i: %d j: %d prefix[i]: %3d prefix[j]: %3d a[i]: %3d b[i]: %3d a[j]: %3d b[j]: %3d val: %lf\n", i, j, prefix[i], prefix[j], a[i], b[i], a[j], b[j], val); if ( op == "gt" && b[i] > val) { count++; } if ( op == "lt" && b[i] < val) { count++; } } } s.insert(b[i]); } printf("%d\n", count); } } return 0; }