pku 2352

来源:互联网 发布:java英文简历 编辑:程序博客网 时间:2024/04/29 22:11
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <algorithm>
  4. typedef struct point
  5. {
  6.     int x;
  7.     int y;
  8. }point;
  9. int main()
  10. {
  11.     int N;
  12.     int i,j,k;
  13.     scanf("%d",&N);
  14.     point *p=new point[N];
  15.     int *hash=new int[N];
  16.     int *temp=new int[N];
  17.     memset(hash,0,N*sizeof(int));
  18.     memset(temp,0,N*sizeof(int));
  19.     for(i=0;i<N;i++)
  20.         scanf("%d%d",&p[i].x,&p[i].y);
  21.     int hash2[32010]={0};
  22.     for(i=0;i<N;i++)
  23.     {
  24.         int flag=0;
  25.         for(j=i-1;j>=0;j--)
  26.             if(p[j].x<=p[i].x)
  27.             {
  28.                 flag=1;
  29.                 temp[i]=temp[j]+1;
  30.                 break;
  31.             }
  32.         if(flag)
  33.         {
  34.             for(k=p[j].x+1;k<=p[i].x;k++)
  35.                 temp[i]+=hash2[k];
  36.         }
  37.         hash[temp[i]]++;
  38.         hash2[p[i].x]++;
  39.     }
  40.     for(i=0;i<N;i++)
  41.             printf("%d/n",hash[i]);
  42.     delete []p;
  43.     delete []hash;
  44.     delete []temp;
  45.     return 0;
  46. }

 

此解法为hash的充分运用。据说一种简单的解法是用线段树,我会学习这种数据结构来解试一试的。

原创粉丝点击