点击打开链接
自己的第一个线段树。。。
按小boss写的。。。
#include"stdio.h" #include"string.h" #include"stdlib.h" struct tree { int x,y,mid; int count; }A[300001]; void creat(int x,int y,int k) { A[k].x=x; A[k].y=y; A[k].mid=(x+y)/2; A[k].count=0; if(x==y)return ; creat(x,A[k].mid,2*k); creat(A[k].mid+1,y,2*k+1); } void insert(int x,int y,int k) { if(A[k].x==x&&A[k].y==y) { A[k].count++;return; } if(x>A[k].mid)insert(x,y,2*k+1); else if(y<=A[k].mid)insert(x,y,2*k); else { insert(x,A[k].mid,2*k); insert(A[k].mid+1,y,2*k+1); } } int ans; void search(int t,int k) { ans+=A[k].count; if(A[k].x==A[k].y&&A[k].x==t)return ; if(t<=A[k].mid)search(t,2*k); else search(t,2*k+1); } int main() { int n,i; int a,b; while(scanf("%d",&n)!=-1&&n) { creat(1,n,1); for(i=0;i<n;i++) { scanf("%d%d",&a,&b); insert(a,b,1); } for(i=1;i<n;i++) { ans=0; search(i,1); printf("%d ",ans); } ans=0; search(i,1); printf("%d\n",ans); } return 0; }
#include"stdio.h" #include"string.h" int main() { int n; int a,b,m,i; int A[100001]; while(scanf("%d",&n)!=-1&&n) { memset(A,0,sizeof(A)); for(i=0;i<n;i++) { scanf("%d%d",&a,&b); A[a]++;A[b+1]--; } m=0; for(i=1;i<n;i++) { m+=A[i]; printf("%d ",m); } printf("%d\n",m+A[n]); } return 0; }