POJ - 2481 - Cows

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ - 2481 - Cows相关的知识,希望对你有一定的参考价值。

题目链接:POJ - 2481

题目大意:

给出区间A[s1,s2],区间B[s3,s4].

如果区间A包涵区间B且不是完全重合,则区间A的强壮度+1。

问对于每个区间,他们被多少个区间包含。

题目分析:

其实可以把区间的起始点和结束点 i 和 j 转换成坐标X,Y。

然后这个题就可以转换成类似于POJ - 2352 的题目了。

套用树状数组即可。

给出代码:

 

技术分享
 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<vector>
 4 #include<cstring>
 5 #include<iostream>
 6 #include<algorithm>
 7 using namespace std;
 8 const int inf=1e5;
 9 int vis[inf+10];
10 int num[inf+10];
11 int bit(int x)
12 {
13     return (x&(-x));
14 }
15 struct node
16 {
17     int x;
18     int y;
19     int id;
20 }nodes[inf+10];
21 bool cmp(const node& a,const node& b)
22 {
23     if(a.y!=b.y)
24     return a.y>b.y;
25     else
26     return a.x<b.x;
27 }
28 int sum(int pos)
29 {
30     int s=0;
31     while(pos>0)
32     {
33         s+=vis[pos];
34         pos-=bit(pos);
35     }
36     return s;
37 }
38 void add(int x,int pos)
39 {
40     while(pos<=inf)
41     {
42         vis[pos]+=x;
43         pos+=bit(pos);
44     }
45     return;
46 }
47 int n;
48 int main()
49 {
50     while(cin>>n&&n)
51     {
52         memset(vis,0,sizeof(vis));
53         for(int i=0;i<n;i++)
54         {
55             scanf("%d%d",&nodes[i].x,&nodes[i].y);
56             nodes[i].x++;
57             nodes[i].id=i;
58         }
59         sort(nodes,nodes+n,cmp);
60         for(int i=0;i<n;)
61         {
62             int s=sum(nodes[i].x);
63             num[nodes[i].id]=s;
64             int j;
65             for(j=i;j<n&&(j==i||(nodes[j].x==nodes[j-1].x&&nodes[j].y==nodes[j-1].y));j++)
66             {
67                 add(1,nodes[j].x);
68                 num[nodes[j].id]=s;
69             }
70             i=j;
71         }
72         for(int i=0;i<n;i++)
73         {
74             if(i!=0)
75                 printf(" ");
76             printf("%d",num[i]);
77         }
78         printf("\n");
79     }
80     return 0;
81 }
View Code

 

以上是关于POJ - 2481 - Cows的主要内容,如果未能解决你的问题,请参考以下文章

poj2481 Cows

POJ2481:Cows(树状数组)

POJ 2481 Cows

POJ 2481 Cows(树状数组)

POJ 2481 Cows (线段树)

poj 2481 cows