poj 2481
2012-11-22 14:33
162 查看
题目:http://poj.org/problem?id=2481
树状数组 和2352 差不多,先按E从大到小,E相同按S从小到大,对于相同的点要特殊处理一下。。有两种方法判断。。详细见代码
树状数组 和2352 差不多,先按E从大到小,E相同按S从小到大,对于相同的点要特殊处理一下。。有两种方法判断。。详细见代码
#include <cmath> #include <ctime> #include <iostream> #include <string> #include <vector> #include <cstdio> #include <cstdlib> #include <cstring> #include <queue> #include <map> #include <set> #include <algorithm> #include <cctype> #include <stack> #include <deque> using namespace std; typedef long long LL; #define EPS 10e-9 #define INF 0x3f3f3f3f #define REP(i,n) for(int i=0; i<(n); i++) const int maxn = 100100; struct node{ int l,r,id; bool operator <(const node & b) const { if(r==b.r) return l<b.l; return r>b.r; } }a[maxn]; int ans[maxn],c[maxn]; int lowbit(int x){ return x&-x; } int sum(int x){ int ret=0; while(x>0){ ret+=c[x]; x-=lowbit(x); } return ret; } void add(int x){ while(x<maxn){ c[x]+=1; x+=lowbit(x); } } int main(){ int n; while(scanf("%d",&n)!=EOF){ if(n==0) break; memset(c,0,sizeof(c)); for(int i=0;i<n;i++){ scanf("%d %d",&a[i].l,&a[i].r); a[i].l++; a[i].r++; a[i].id=i; } sort(a,a+n); for(int i=0;i<n;i++){ if(i>0&&a[i].l==a[i-1].l&&a[i].r==a[i-1].r){ ans[ a[i].id ]=ans[ a[i-1].id]; } else ans[a[i].id]=sum(a[i].l); // int j=i-1; // while(j>=0&&a[j].l==a[i].l&&a[j].r==a[i].r){ // ans[a[i].id ]--; // j--; // } add(a[i].l); } printf("%d",ans[0]); for(int i=1;i<n;i++) printf(" %d",ans[i]); printf("\n"); } return 0; }
相关文章推荐
- poj 2481 - Cows(树状数组)
- poj 2481 Cows(树状数组)
- POJ 2481
- POJ 2481 Cows
- POJ 2481:Cows 树状数组
- poj2481 Cows(数状数组)
- poj 2481 Cows(哇咔咔,树状数组^ ^)
- POJ 2481 Cows 树状数组
- POJ2481 Cows
- [树状数组] poj 2481 Cows
- POJ - 2481 - Cows (树状数组+排序!!)
- POJ 2481 Cows 树状数组
- POJ(2481)Cows 树状数组
- POJ 2481 Cows && POJ 2352 Stars(树状数组妙用)
- POJ:2481 Cows
- poj 2481加强版 zstu 3113 树状数组 排序、离散化
- POJ - 2481 Cows(树状数组)
- poj 2481 Cows 树状数组+逆序对变形
- POJ-2481 Cows
- POJ 2481 cows