- #include <stdio.h>
- #include <string.h>
- #include <algorithm>
- typedef struct point
- {
- int x;
- int y;
- }point;
- int main()
- {
- int N;
- int i,j,k;
- scanf("%d",&N);
- point *p=new point[N];
- int *hash=new int[N];
- int *temp=new int[N];
- memset(hash,0,N*sizeof(int));
- memset(temp,0,N*sizeof(int));
- for(i=0;i<N;i++)
- scanf("%d%d",&p[i].x,&p[i].y);
- int hash2[32010]={0};
- for(i=0;i<N;i++)
- {
- int flag=0;
- for(j=i-1;j>=0;j--)
- if(p[j].x<=p[i].x)
- {
- flag=1;
- temp[i]=temp[j]+1;
- break;
- }
- if(flag)
- {
- for(k=p[j].x+1;k<=p[i].x;k++)
- temp[i]+=hash2[k];
- }
- hash[temp[i]]++;
- hash2[p[i].x]++;
- }
- for(i=0;i<N;i++)
- printf("%d/n",hash[i]);
- delete []p;
- delete []hash;
- delete []temp;
- return 0;
- }
此解法为hash的充分运用。据说一种简单的解法是用线段树,我会学习这种数据结构来解试一试的。