#include #include #include #include #include #include #include #include using namespace std; struct T { int t; int v; long int s; int prev_min; int act_min; int prev_max; int act_max; }; int main () { while(!cin.fail()){ int N; cin >> N; T samples[100000]; for (int n = 0; n < N; n++){ cin >> samples[n].t >> samples[n].v; if (!n) { samples[n].prev_min = samples[n].act_min = 0; samples[n].s = 0; } if (n) { samples[n].s = samples[n-1].s + samples[n-1].v; if(samples[n].v < samples[n-1].v) { samples[n].prev_min = samples[n-1].act_min; samples[n].act_min = n; } else { samples[n].prev_min = samples[n].act_min = samples[n-1].act_min; } if(samples[n].v > samples[n-1].v) { samples[n].prev_max = samples[n-1].act_max; samples[n].act_max = n; } else { samples[n].prev_max = samples[n].act_max = samples[n-1].act_max; } } } int R; cin >> R; for (int r = 0; r < R; ++r){ string l1, l2; int time; int cases = 0; cin >> l1 >> l2 >> time; int low = 0; if(l2[0] == 'a') { for (int i = 1; i < N; ++i){ while(samples[low].t < samples[i].t - time) low++; if ( low == i) continue; double avg = (samples[i].s - samples[low].s) / (i - low/1.0); if(l1[0] == 'g' && avg < samples[i].v/1.0) cases++; if(l1[0] == 'l' && avg > samples[i].v/1.0) cases++; } cout << cases << endl; } if(l2[1] == 'i') { for (int i = 1; i < N; ++i){ while(samples[low].t < samples[i].t - time) low++; if ( low == i) continue; int min = 1000000000; if(samples[i-1].act_min < low) min = samples[low].v; int pos = i-1; while(pos >= low) { if(samples[pos].act_min != pos) pos = samples[pos].act_min; else { if(samples[pos].v < min) min = samples[pos].v; if(pos == 0) break; pos = samples[pos].prev_min; } } if(l1[0] == 'g' && min < samples[i].v) cases++; if(l1[0] == 'l' && min > samples[i].v) cases++; } cout << cases << endl; } if(l2[1] == 'a') { for (int i = 1; i < N; ++i){ while(samples[low].t < samples[i].t - time) low++; if ( low == i) continue; int max = 0; if(samples[i-1].act_max < low) max = samples[low].v; int pos = i-1; while(pos >= low) { if(samples[pos].act_max != pos) pos = samples[pos].act_max; else { if(samples[pos].v > max) max = samples[pos].v; if(pos == 0) break; pos = samples[pos].prev_max; } } if(l1[0] == 'g' && max < samples[i].v) cases++; if(l1[0] == 'l' && max > samples[i].v) cases++; } cout << cases << endl; } } } return 0; }