poj 2481
2011-05-13 18:58
113 查看
题意:FJ有n头牛(编号为1~n),每一头牛都有一个测验值[S,
E],如果对于牛i和牛j来说,它们的测验值满足下面的条件则证明牛i比牛j强壮:Si <= Sj and
Ej <= Ei and Ei - Si > Ej -
Sj。现在已知每一头牛的测验值,要求输出每头牛有几头牛比其强壮。
代码:
E],如果对于牛i和牛j来说,它们的测验值满足下面的条件则证明牛i比牛j强壮:Si <= Sj and
Ej <= Ei and Ei - Si > Ej -
Sj。现在已知每一头牛的测验值,要求输出每头牛有几头牛比其强壮。
代码:
#include<iostream> #include<fstream> using namespace std; int n,m; struct e{ int id,s,w; }; e a[100011]; int cmp(const void *a,const void *b){ e *s=(e*)a; e *t=(e*)b; if(s->s!=t->s) return s->s-t->s; else return t->w-s->w; } int b[100010]; int lowbit(int s){ return s&(-s); } void add(int s){ while(s<=m) { b[s]++; s+=lowbit(s); } } int getsum(int s){ int i=0; while(s>0) { i+=b[s]; s-=lowbit(s); } return i; } int ans[100011]; void read(){ // ifstream cin("in.txt"); int i,j,k; while(scanf("%d",&n)!=EOF) { if(n==0) return; memset(b,0,sizeof(b)); m=0; for(i=1;i<=n;i++) { // cin>>a[i].s>>a[i].w; scanf("%d%d",&a[i].s,&a[i].w); a[i].w++; a[i].s++; m=max(m,a[i].w); a[i].id=i; } qsort(a+1,n,sizeof(e),cmp); a[0].s=a[0].w=-1; for(i=1;i<=n;i++) { if(a[i].s==a[i-1].s&&a[i].w==a[i-1].w) { ans[a[i].id]=ans[a[i-1].id]; add(a[i].w); continue; } j=getsum(m); j-=getsum(a[i].w-1); ans[a[i].id]=j; add(a[i].w); } for(i=1;i<=n;i++) cout<<ans[i]<<' '; cout<<endl; } } int main(){ read(); return 0; }
相关文章推荐
- POJ-2481 Cows 树状数组
- POJ 2481 Cows
- poj 2481 Cows 树状数组解法,详细解析。
- poj2481
- poj 2481 树状数组
- poj 2481 Cows 树状数组
- POJ 2481 Cows
- POJ 2481 Cows(树状数组)
- POJ 2481 Cows (树状数组)
- POJ-2481 Cows (线段树单点更新)
- POJ 2481 Cows
- poj2481 Cows(树状数组)
- poj 2481(树状数组)
- POJ-2481-Cows
- poj 2481 cows(树状数组)
- poj_2481,Cows,树状数组
- 每次输出有几条线段能完全覆盖大于自己和hdu5372相反 树状数组或线段树 poj 2481 Cows
- 树状数组简单poj 2481
- poj 2481 Cows(树状数组)
- poj 2481 Cows (树状数组)