双倍经验2716.
KD-Tree模板题。
注意一下"nth_element()"
参考: http://blog.csdn.net/jiangshibiao/article/details/34144829

code:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m,D,root,x,y;
struct N{
	int d[2];
	int l,r;
	int min[2];
	int max[2];
}a[1000005];
bool cmp(const N&a,const N&b){
	if(a.d[D]!=b.d[D]) return a.d[D]<b.d[D];
	return a.d[D^1]<b.d[D^1];
}
inline void up(int k,int s){
	a[k].min[0]=min(a[k].min[0],a[s].min[0]);
	a[k].min[1]=min(a[k].min[1],a[s].min[1]);
	a[k].max[0]=max(a[k].max[0],a[s].max[0]);
	a[k].max[1]=max(a[k].max[1],a[s].max[1]);
}
int bd(int l,int r,int d){
	D=d;
	int mid=(l+r)>>1;
	nth_element(a+l,a+mid+1,a+r+1,cmp);
	a[mid].min[0]=a[mid].max[0]=a[mid].d[0];
	a[mid].min[1]=a[mid].max[1]=a[mid].d[1];
	if(l!=mid) a[mid].l=bd(l,mid-1,d^1);
	if(r!=mid) a[mid].r=bd(mid+1,r,d^1);
	if(a[mid].l) up(mid,a[mid].l);
	if(a[mid].r) up(mid,a[mid].r);
	return mid;
}
const int inf=0x7fffffff;
int ans;
int getdis(int k){
	int ret=0;
	if(x<a[k].min[0]) ret+=a[k].min[0]-x;
	if(x>a[k].max[0]) ret+=x-a[k].max[0];
	if(y<a[k].min[1]) ret+=a[k].min[1]-y;
	if(y>a[k].max[1]) ret+=y-a[k].max[1];
	return ret;
}
void ask(int k){
	int d0=abs(a[k].d[0]-x)+abs(a[k].d[1]-y);
	if(d0<ans) ans=d0;
	int d1=(a[k].l)?getdis(a[k].l):inf;
	int d2=(a[k].r)?getdis(a[k].r):inf;
	if(d1<d2){
		if(d1<ans) ask(a[k].l);
		if(d2<ans) ask(a[k].r);
	}else{
		if(d2<ans) ask(a[k].r);
		if(d1<ans) ask(a[k].l);
	}
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++){
		scanf("%d%d",&a[i].d[0],&a[i].d[1]);
	}
	root=bd(1,n,0);
	for(int i=0,t;i<m;i++){
		scanf("%d%d%d",&t,&x,&y);
		if(t==1){
			n++;
			a[n].min[0]=a[n].max[0]=a[n].d[0]=x;
			a[n].min[1]=a[n].max[1]=a[n].d[1]=y;
			int p=root,D=0;
			while(1){
				up(p,n);
				if(a[n].d[D]<a[p].d[D]){
					if(!a[p].l) {
						a[p].l=n;
						break;
					}else{
						p=a[p].l;
					}
				}else{
					if(!a[p].r) {
						a[p].r=n;
						break;
					}else{
						p=a[p].r;
					}
				}
				D^=1;
			}
		}else{
			ans=inf;
			ask(root);
			printf("%d\n",ans);
		}
	}
	return 0;
}