hdu 5480|| bestcoder   #57 div 2 Conturbatio(前缀和||树状数组)

比较水.

唯一一点需要注意的是…

可能有重复元素…

因为我的思路是用两棵一维树状数组搞..

每个点标记为1

然后看矩形的两个方向中是否至少有一个方向上和等于长度…

所以这样如果有重复元素的话,不处理会出错.. 

但实际上又没修改..直接前缀和就好了...

树状数组个毛线...

不过看到还有人线段树搞得233333

  1/*************************************************************************
  2	> File Name: code/bc/#57/1002.cpp
  3	> Author: 111qqz
  4	> Email: rkz2013@126.com 
  5	> Created Time: 2015年09月26日 星期六 19时31分10秒
  6 ************************************************************************/
  7
  8#include<iostream>
  9#include<iomanip>
 10#include<cstdio>
 11#include<algorithm>
 12#include<cmath>
 13#include<cstring>
 14#include<string>
 15#include<map>
 16#include<set>
 17#include<queue>
 18#include<vector>
 19#include<stack>
 20#include<cctype>
 21#define y1 hust111qqz
 22#define yn hez111qqz
 23#define j1 cute111qqz
 24#define ms(a,x) memset(a,x,sizeof(a))
 25#define lr dying111qqz
 26using namespace std;
 27#define For(i, n) for (int i=0;i<int(n);++i)  
 28typedef long long LL;
 29typedef double DB;
 30const int inf = 0x3f3f3f3f;
 31const int N=1E5+7;
 32int c[N],d[N];
 33int n,m,K,Q;
 34bool vx[N],vy[N];
 35
 36int lowbit(int x)
 37{
 38    return x&(-x);
 39}
 40
 41void update ( int x,int delta)
 42{
 43    for ( int i = x ; i  <= n ; i = i + lowbit(i))
 44    {
 45	c[i] = c[i] + delta;
 46    }
 47}
 48
 49LL sum ( int x)
 50{
 51    LL res = 0 ;
 52    for ( int i = x ; i >= 1 ; i = i - lowbit(i))
 53    {
 54	 res  = res  + c[i];
 55    }
 56    return res;
 57}
 58
 59void update2( int y,int delta)
 60{
 61    for ( int i = y ; i <= m ; i = i + lowbit(i))
 62    {
 63	d[i] = d[i] + delta;
 64    }
 65}
 66
 67LL sum2( int y)
 68{
 69    LL res = 0 ;
 70    for ( int i = y  ;  i >= 1 ; i = i - lowbit(i))
 71    {
 72	res = res + d[i];
 73    }
 74    return res;
 75
 76}
 77int main()
 78{
 79  #ifndef  ONLINE_JUDGE 
 80   freopen("in.txt","r",stdin);
 81  #endif
 82   int T;
 83       scanf("%d",&T);
 84   while (T--)
 85    {
 86	ms(c,0);
 87	ms(d,0);
 88	memset(vx,false,sizeof(vx));
 89	memset(vy,false,sizeof(vy));
 90	scanf("%d %d %d %d",&n,&m,&K,&Q);
 91	for ( int i  = 0 ; i <K ; i++)
 92	{
 93	    int x,y;
 94	    scanf("%d %d",&x,&y);
 95	    if (!vx[x])
 96	    {
 97	     	update (x,1);
 98		vx [x] = true;
 99	    }
100	    if (!vy[y])
101	    {
102		update2 (y,1);
103		vy[y] = true;
104	    }
105
106	}
107	for ( int i = 0 ; i < Q ; i++)
108	{
109	    int x1,y1,x2,y2;
110	    scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
111	    int xx = sum(x2)-sum(x1-1);
112	    int yy = sum2(y2)-sum2(y1-1);
113	  //  cout<<"sum(x2):"<<sum(x2)<<endl;
114	  //  cout<<"sum(x1-1):"<<sum(x1-1)<<endl;
115	  //  cout<<"sum(y2):"<<sum(y2)<<endl;
116	  //  cout<<"sum(y1-1)"<<sum(y1-1)<<endl;
117	  //  cout<<"xx:"<<xx<<endl;
118	  //  cout<<"yy:"<<yy<<endl;
119	    if (xx>=x2-x1+1||yy>=y2-y1+1)
120	    {
121		puts("Yes");
122	    }
123	    else
124	    {
125		puts("No");
126	    }
127
128	}
129    }
130
131
132 #ifndef ONLINE_JUDGE  
133  fclose(stdin);
134  #endif
135	return 0;
136}