#include #include #include #include using namespace std; struct TSA { int n; int sumV; int maxV; int minV; }; double ag( TSA& x ) { //printf("ag: %f\n", x.sumV * 1.0 / x.n); return x.sumV * 1.0 / x.n; } double mn( TSA& x ) { //printf ("mn: %f", x.minV); return x.minV; } double mx( TSA& x ) { return x.maxV; } bool gt(int x, double y) { //printf("gt: %d\n", x > y ); return x > y; } bool lt(int x, double y) { //printf("lt: %d\n", x < y ); return x < y; } int main() { int n; scanf("%d", &n); int* T = new int[n]; int* Tx = new int[n]; int* V = new int[n]; for ( int i = 0; i < n; ++i ) { int t; scanf("%d%d", &(Tx[i]), &(V[i]) ); T[i] = Tx[i]; if ( i != 0 ) T[i] -= Tx[i-1]; //printf("%d\n", T[i]); } int c; function fn1; function fn2; TSA S; int sumT; scanf("%d", &c); while ( c-- ) { char c1, c2, _; int L; scanf(" %c%c %c%c%c%d", &c1, &_, &_, &c2, &_, &L); if ( c1 == 'g' ) { fn1 = gt; } else { fn1 = lt; } switch (c2) { case 'v': fn2 = ag; break; case 'a': fn2 = mx; break; case 'i': fn2 = mn; break; } S.minV = S.maxV = V[0]; S.sumV = 0; S.n = 0; sumT = 0; int j = 0; int cnt = 0; for ( int i = 1; i < n; ++i ) { (S.n)++; sumT += T[i-1]; S.sumV += V[i-1]; if ( S.minV > V[i-1] ) { S.minV = V[i-1]; } if ( S.maxV < V[i-1] ){ S.maxV = V[i-1]; } while ( sumT > L ) { sumT -= T[j]; S.sumV -= V[j]; if ( V[j] == S.minV ) { S.minV = V[j+1]; for ( int z = j + 1; z < i; ++z ) { if ( V[z] < S.minV ) S.minV = V[z]; } } if ( V[j] == S.maxV ) { S.maxV = V[j+1]; for ( int z = j + 1; z < i; ++z ) { if ( V[z] > S.maxV ) S.maxV = V[z]; } } j++; (S.n)--; } //printf("%d %d\n", sumT, fn1(V[i],fn2(S)) ); if ( sumT > 0 && fn1(V[i],fn2(S)) ) { cnt++; } } printf("%d\n", cnt); } return 0; }