#include #include /* x[i] ... *(x+i) *x == x[0] == *(x+0) */ template T abs(T v){ return v>0?v:-v; } template T max(T a, T b){ return a>b?a:b; } template T min(T a, T b){ return a T min(T a, T b, T c){ return min(min(a,b), min(b,c)); } int poolId=0; struct TREE{ int v; struct TREE* l; struct TREE* r; }; struct TREE* pool; struct TREE* makeTree(int v){ struct TREE* t=pool+(poolId++); t->l=NULL; t->r=NULL; t->v=v; return t; } void tins(struct TREE* t,int v){ while (1){ if (vv){ if (t->l==NULL){ t->l=makeTree(v); return; } t=t->l; } else if (v>t->v){ if (t->r==NULL){ t->r=makeTree(v); return; } t=t->r; } else{ return; } } } int tfind(struct TREE *t,int v){ while (1){ if (vv){ if (t->l==NULL) return t->v; t=t->l; } else if (v>t->v){ if (t->r==NULL) return t->v; t=t->r; } else{ return t->v; } } } int tfind2(struct TREE *t,int v){ while (1){ if (v>t->v){ if (t->r==NULL) return t->v; t=t->r; } else if (vv){ if (t->l==NULL) return t->v; t=t->l; } else{ return t->v; } } } int tfind3(struct TREE *t,int v, int* t1){ int pv=-100000000; while (1){ if (v>t->v){ if (t->r==NULL){ *t1=t->v; return pv; } pv=t->v; t=t->r; } else if (vv){ if (t->l==NULL){ *t1=t->v; return pv; } pv=t->v; t=t->l; } else{ *t1=t->v; return t->v; } } } int main(){ int N, Q; int a,b; // int x[300001], y[300001]; scanf("%d %d", &N, &Q); pool=(struct TREE*)malloc(sizeof(struct TREE)*(N*2+2)); struct TREE* tx=makeTree(-10000000); struct TREE* ty=makeTree(-10000000); for(int i=0;i