#include <bits/stdc++.h>
using namespace std;
vector<int> R,C;
// index が条件を満たすかどうか
bool isOKR(int index, int key) {
if (R[index] >= key) return true;
else return false;
}
// 汎用的な二分探索のテンプレ
int binary_searchR(int key) {
int ng = -1; //「index = 0」が条件を満たすこともあるので、初期値は -1
int ok = (int)R.size(); // 「index = a.size()-1」が条件を満たさないこともあるので、初期値は a.size()
/* ok と ng のどちらが大きいかわからないことを考慮 */
while (abs(ok - ng) > 1) {
int mid = (ok + ng) / 2;
if (isOKR(mid, key)) ok = mid;
else ng = mid;
}
return ok;
}
// index が条件を満たすかどうか
bool isOKC(int index, int key) {
if (C[index] >= key) return true;
else return false;
}
// 汎用的な二分探索のテンプレ
int binary_searchC(int key) {
int ng = -1; //「index = 0」が条件を満たすこともあるので、初期値は -1
int ok = (int)C.size(); // 「index = a.size()-1」が条件を満たさないこともあるので、初期値は a.size()
/* ok と ng のどちらが大きいかわからないことを考慮 */
while (abs(ok - ng) > 1) {
int mid = (ok + ng) / 2;
if (isOKC(mid, key)) ok = mid;
else ng = mid;
}
return ok;
}
int main() {
int H,W,N,Q,a,b,c;
cin>>H>>W>>N>>Q;
for(int i=0;i<N;i++){
cin>>a>>b;
R.push_back(a);
C.push_back(b);
}
sort(R.begin(),R.end());
sort(C.begin(),C.end());
for(int i=0;i<Q;i++){
cin>>a>>b>>c;
if(a==1){
cout<<binary_searchR(c+1)-binary_searchR(b)<<endl;
}else{
cout<<binary_searchC(c+1)-binary_searchC(b)<<endl;
}
}
}
To embed this project on your website, copy the following code and paste it into your website's HTML: