POJ-2481 Cows 树状数组
2014-03-28 12:19
399 查看
题目链接
给出n个牛的坐标,i牛的坐标为[Si,Ei],j牛的坐标为[Sj,Ej],若Si<=Sj,Ej<=Ei并且Ei-Si>Ej-Sj,则牛i比牛j强壮,现在呀要求出每个牛比它强壮的牛的数量。
给出n个牛的坐标,i牛的坐标为[Si,Ei],j牛的坐标为[Sj,Ej],若Si<=Sj,Ej<=Ei并且Ei-Si>Ej-Sj,则牛i比牛j强壮,现在呀要求出每个牛比它强壮的牛的数量。
#include<stdio.h> #include<iostream> #include<string> #include<string.h> #include<math.h> #include<functional> #include<algorithm> #include<vector> #include<queue> using namespace std; const int maxn = 100005; const int inf = 1<<30;//0x7f; typedef __int64 LL; int n,Max; int c[maxn],ans[maxn]; struct node { int id,l,r; }cow[maxn]; bool cmp( node a,node b ) { if( a.r == b.r ) return a.l < b.l; return a.r > b.r; } int lowbit( int x ) { return x&(-x); } void add( int x,int ad ) { while( x <= Max ) { c[x] += ad; x += lowbit(x); } } int Sum( int x ) { int ans = 0; while( x >= 1 ) { ans += c[x]; x -= lowbit(x); } return ans; } int main() { #ifndef ONLINE_JUDGE freopen("data.txt","r",stdin); #endif while( scanf("%d",&n) != EOF,n ) { Max = 0; memset(c,0,sizeof(c)); for( int i = 0; i < n; i ++ ){ cow[i].id = i; scanf("%d%d",&cow[i].l,&cow[i].r); cow[i].l ++,cow[i].r ++; Max = Max>cow[i].r?Max:cow[i].r; } sort( cow,cow+n,cmp ); for( int i = 0; i < n; i ++ ){ if( i == 0 ){ ans[cow[i].id] = 0; add(cow[i].l,1); } else { if( cow[i].l == cow[i-1].l && cow[i].r == cow[i-1].r ) ans[cow[i].id] = ans[cow[i-1].id]; else ans[cow[i].id] = Sum( cow[i].l ); add( cow[i].l,1 ); } } for( int i = 0; i < n-1; i ++ ) printf("%d ",ans[i]); printf("%d\n",ans[n-1]); } return 0; }
相关文章推荐
- POJ 2481 cows 树状数组
- POJ 2481 Cows 树状数组
- 树状数组 POJ 2481 Cows
- POJ 2481 Cows (线段树||树状数组)
- Cows(poj 2481 树状数组)
- (POJ 2481)Cows 树状数组
- poj_2481,Cows,树状数组
- poj 2481 Cows 树状数组
- poj_2481,Cows,树状数组
- POJ 2481 Cows 树状数组
- POJ 2481 - Cows 树状数组离线处理
- POJ 2481 Cows 树状数组
- POJ(2481)Cows 树状数组
- Cows - POJ 2481 树状数组
- poj2481~Cows~(树状数组)
- POJ 2481:Cows 树状数组
- POJ 2481 Cows 树状数组
- POJ 2352_Stars && POJ-2481 Cows (线段树单点更新+树状数组)
- POJ 2481:Cows 树状数组
- poj 2481 Cows(哇咔咔,树状数组^ ^)