| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
有没有好心人帮我看看 我第一次写线段树 但是是WA#include<stdio.h>
#include<stdlib.h>
struct mytree
{
int l,r,num;
mytree *lc,*rc;
};
mytree *root;
int ans[15005];
void build(int l,int r,mytree *rt)
{
rt->l=l;rt->r=r;
rt->num=0;
int mid=(l+r)/2;
if(r-l>1)
{
mytree *t=new mytree;
rt->lc=t;
mytree *tt=new mytree;
rt->rc=tt;
build(l,mid,rt->lc);
build(mid+1,r,rt->rc);
}
else
rt->lc=rt->rc=NULL;
}
int get(int i,int j,mytree *t)
{
int l=t->l,r=t->r;
int ans1=0,ans2=0;
int mid=(l+r)/2;
if(i==l&&j==r)
return t->num;
if(j<=mid&&t->lc!=NULL)
return get(i,j,t->lc);
if(i>mid&&t->rc!=NULL)
return get(i,j,t->rc);
if(t->lc!=NULL)
ans1=get(i,mid,t->lc);
if(t->rc!=NULL)
ans2=get(mid+1,j,t->rc);
return ans1+ans2;
}
void add(int a,mytree *t)
{
int l=t->l,r=t->r;
int mid=(l+r)/2;
// if(l-r<=1)
// return ;
if(a>=l&&a<=r)
t->num++;
if(l==r)
return ;
if(a<=mid&&t->lc!=NULL)
add(a,t->lc);
if(a>mid&&t->rc!=NULL)
add(a,t->rc);
}
int main()
{
int n,i;
root=new mytree;
build(0,32000,root);
scanf("%d",&n);
for(i=0;i<n;i++)
{
int x,y;
scanf("%d%d",&x,&y);
ans[get(0,x,root)]++;
add(x,root);
}
for(i=0;i<n;i++)
printf("%d\n",ans[i]);
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator