#include #include #include #include #include #include #include #include #include #include int main(int argc, char* argv[]) { std::ios_base::sync_with_stdio(false); int nsamples; while ((std::cin >> nsamples).eof() == false) { std::vector > samples(nsamples); for (int i = 0; i < nsamples; ++i) { int Ti, Vi; std::cin >> Ti >> Vi; samples[i].first = Ti; samples[i].second = Vi; } int nconds; std::cin >> nconds; for (int i = 0; i < nconds; ++i) { std::string rel_op, aggr_fun; int length; std::cin >> rel_op >> aggr_fun >> length; int resultCounter = 0; if (rel_op == "gt") { if (aggr_fun == "min") { for (int i = 1; i < samples.size(); i++) { int min = samples[i].first - samples[i - 1].first > length ? INT_MAX : samples[i - 1].second;; for (int k = i - 2; k >= 0 && samples[i].first - samples[k].first <= length; k--) { if (samples[k].second < min) min = samples[k].second; } if (min != INT_MAX && samples[i].second > min) resultCounter++; } } else if (aggr_fun == "max") { for (int i = 1; i < samples.size(); i++) { int max = samples[i].first - samples[i - 1].first > length ? -1 : samples[i - 1].second; for (int k = i - 2; k >= 0 && samples[i].first - samples[k].first <= length; k--) { if (samples[k].second > max) max = samples[k].second; } if (max != -1 && samples[i].second > max) resultCounter++; } } else // avg { int firstIn = 0; long long average = 0; int samplesAdded = 0; for (int i = 1; i < samples.size(); i++) { average += samples[i-1].second; samplesAdded++; for (; firstIn < i; firstIn++) { if (samples[i].first - samples[firstIn].first > length) { average -= samples[firstIn].second; samplesAdded--; } else { break; } } double averageNum = double(average) / samplesAdded; if (samplesAdded && samples[i].second > averageNum) resultCounter++; } } } else // lt { if (aggr_fun == "min") { for (int i = 1; i < samples.size(); i++) { int min = samples[i].first - samples[i - 1].first > length ? INT_MAX : samples[i - 1].second; for (int k = i - 2; k >= 0 && samples[i].first - samples[k].first <= length; k--) { if (samples[k].second < min) min = samples[k].second; } if (min != INT_MAX && samples[i].second < min) resultCounter++; } } else if (aggr_fun == "max") { for (int i = 1; i < samples.size(); i++) { int max = samples[i].first - samples[i-1].first > length ? -1 : samples[i - 1].second; for (int k = i - 2; k >= 0 && samples[i].first - samples[k].first <= length; k--) { if (samples[k].second > max) max = samples[k].second; } if (max != -1 && samples[i].second < max) resultCounter++; } } else // avg { int firstIn = 0; long long average = 0; int samplesAdded = 0; for (int i = 1; i < samples.size(); i++) { average += samples[i - 1].second; samplesAdded++; for (; firstIn < i; firstIn++) { if (samples[i].first - samples[firstIn].first > length) { average -= samples[firstIn].second; samplesAdded--; } else { break; } } double averageNum = double(average) / samplesAdded; if (samplesAdded && samples[i].second < averageNum) resultCounter++; } } } std::cout << resultCounter << std::endl; } } return 0; }