POJ 2481 Cows

xiaoxiao2021-02-28  40

目录:

题意:分析:思路:代码:

题意:

给出每头奶牛选定吃草的范围,求出比他们强大的其他奶牛的头数

分析:

这道题,其实和小编做过的POJ 2352 Stars很像,区别在于一个排了序,一个没排序。我们只需要在其基础上排个序即可AC 当然,我们输出还要按原顺序输出,这点还需各位读者注意下的 且可能会有两头奶牛的范围会一样,所以我们要加个判断

思路:

1.输入 2.排序 3.按照树状数组的操作继续 4.输出

代码:

#include<cstdio> #include<cstring> #include<iostream> #include<cmath> #include<algorithm> #define LL long long using namespace std; inline LL read() { LL d=0,f=1;char s=getchar(); while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();} while(s>='0'&&s<='9'){d=d*10+s-'0';s=getchar();} return d*f; } struct node{ int b,e,num,c; }x[100001]; int c[100001]; int n; int lowbit(int x) { return x&(-x); } void change(int k) { while(k<=100001) { x[k].c++; k+=lowbit(k); } } int sum(int k) { int t=0; while(k>0) { t+=x[k].c; k-=lowbit(k); } return t; } bool cmp(node a,node b) { if(a.e==b.e) return a.b<b.b; return a.e>b.e; } int main() { scanf("%d",&n); int w; while(n!=0) { fill(c,c+100001,0); for(int i=1;i<=n;i++) x[i].c=0,x[i].b=read(),x[i].e=read(),x[i].num=i; sort(x+1,x+1+n,cmp); for(int i=1;i<=n;i++) { if(x[i].b==x[i-1].b&&x[i].e==x[i-1].e) c[x[i].num]=c[x[i-1].num];//直接等于 else c[x[i].num]=sum(x[i].b+1); change(x[i].b+1); } for(int i=1;i<=n;i++) printf("%d ",c[i]); printf("\n"); scanf("%d",&n); } return 0; }
转载请注明原文地址: https://www.6miu.com/read-2049982.html

最新回复(0)