CF369E Valera and Queries kdtree
code:
#include
#define N 300005
using namespace std;
void setIO(string s)
{
string in=s+".in";
string out=s+".out";
freopen(in.c_str(),"r",stdin);
// freopen(out.c_str(),"w",stdout);
}
namespace kd
{
int d;
struct node
{
int ch[2],p[2],minv[2],maxv[2],sum,w;
}t[N];
bool cmp(node a,node b)
{
return a.p[d]==b.p[d]?a.p[d^1]=x1&&t[p].maxv[0]<=x2&&t[p].minv[1]>=y1&&t[p].maxv[1]<=y2;
}
int isout(int p,int x1,int y1,int x2,int y2)
{
return t[p].maxv[0]x2||t[p].maxv[1]y2;
}
void pushup(int x,int y)
{
t[x].sum+=t[y].sum;
for(int i=0;i<2;++i)
{
t[x].minv[i]=min(t[x].minv[i],t[y].minv[i]);
t[x].maxv[i]=max(t[x].maxv[i],t[y].maxv[i]);
}
}
int build(int l,int r,int o)
{
d=o;
int mid=(l+r)>>1;
nth_element(t+l,t+mid,t+1+r,cmp);
for(int i=0;i<2;++i) t[mid].minv[i]=t[mid].maxv[i]=t[mid].p[i];
t[mid].sum=1;
t[mid].ch[0]=t[mid].ch[1]=0;
if(mid>l) t[mid].ch[0]=build(l,mid-1,o^1),pushup(mid,t[mid].ch[0]);
if(r>mid) t[mid].ch[1]=build(mid+1,r,o^1),pushup(mid,t[mid].ch[1]);
return mid;
}
int query(int p,int x1,int y1,int x2,int y2)
{
if(isin(p,x1,y1,x2,y2)) return t[p].sum;
if(isout(p,x1,y1,x2,y2)) return 0;
int re=(t[p].p[0]>=x1&&t[p].p[0]<=x2&&t[p].p[1]>=y1&&t[p].p[1]<=y2);
if(t[p].ch[0]) re+=query(t[p].ch[0],x1,y1,x2,y2);
if(t[p].ch[1]) re+=query(t[p].ch[1],x1,y1,x2,y2);
return re;
}
};
namespace IO
{
char *p1,*p2,buf[100000];
#define nc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++)
int rd() {int x=0; char c=nc(); while(c<48) c=nc(); while(c>47) x=(((x<<2)+x)<<1)+(c^48),c=nc(); return x;}
};
int arr[N];
int main()
{
// setIO("input");
int n,m,i,j,root;
n=IO::rd(),m=IO::rd();
for(i=1;i<=n;++i)
kd::t[i].p[0]=IO::rd(),kd::t[i].p[1]=IO::rd();
// scanf("%d%d",&kd::t[i].p[0],&kd::t[i].p[1]);
root=kd::build(1,n,0);
for(i=1;i<=m;++i)
{
int k=IO::rd(),re=0;
// scanf("%d",&k);
for(j=1;j<=k;++j) arr[j]=IO::rd();
arr[0]=0,arr[k+1]=1000002;
for(j=0;j<=k;++j)
{
if(arr[j+1]>arr[j]+1)
{
re+=kd::query(root,arr[j]+1,arr[j]+1,arr[j+1]-1,arr[j+1]-1);
}
}
printf("%d
",n-re);
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.