Pagini recente » Cod sursa (job #2335318) | Cod sursa (job #985238) | Cod sursa (job #1123247) | Cod sursa (job #1363196) | Cod sursa (job #1616633)
#include <fstream>
#include <iostream>
#define DIM 10005
using namespace std;
ifstream fin("qxy.in");
ofstream fout("qxy.out");
int N,Q,a,b,x,y,ans;
short arbmin[35000],arbmax[35000];
void build(int nod,int p,int u){
if(p==u){
fin >> arbmin[nod];
arbmax[nod]=arbmin[nod];
return;
}
int mid = (p+u)>>1;
build(2*nod,p,mid);
build(2*nod+1,mid+1,u);
arbmin[nod]=min(arbmin[2*nod],arbmin[2*nod+1]);
arbmax[nod]=max(arbmax[2*nod],arbmax[2*nod+1]);
}
void query(int nod,int p,int u){
if(p==u){
if(arbmin[nod]>=x && arbmax[nod]<=y)
ans++;
return;
}
if(p>=a && u<=b && arbmin[nod]>=x && arbmax[nod]<=y){
ans+=u-p+1;
return;
}
int mid = (p+u)>>1;
if(a<=mid && (!arbmin[2*nod]>y || !arbmax[2*nod]<x))
query(2*nod,p,mid);
if(b>mid && (!arbmin[2*nod+1]>y || !arbmax[2*nod+1]<x))
query(2*nod+1,mid+1,u);
}
int main(){
fin >> N;
build(1,1,N);
fin >> Q;
while(Q--){
fin >> a >> b >> x >> y;
ans=0;
query(1,1,N);
fout << ans << "\n";
}
}