Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
看到的数据都过了,这个程序怎么就过不了啊?(换成注释后面是可以过的)#include<iostream> #include<algorithm> #define MAX 100001 using namespace std; int c[MAX],res[MAX]; struct node { int s,e; int i; bool operator <(const node a)const { if(e==a.e) return s > a.s; return e < a.e; } }cow[MAX]; int lowbit(int x) { return x&(-x); } int getsum(int x) { int sum=0; while(x > 0) { sum+=c[x]; x-=lowbit(x); } return sum; } void update(int x,int delta) { while(x < MAX) { c[x]+=delta; x+=lowbit(x); } } int main() { int n; while(EOF!=scanf("%d",&n) && n) { memset(c,0,sizeof(c)); memset(res,0,sizeof(res)); for(int i=1;i<=n;i++) { scanf("%d%d",&cow[i].s,&cow[i].e); cow[i].s++; cow[i].e++; cow[i].i=i; } sort(cow+1,cow+n+1); update(cow[n].s,1); for(int i=n-1;i>0;i--) { if( (cow[i].s==cow[i+1].s) && (cow[i].e==cow[i+1].e)) { res[cow[i].i]=getsum(cow[i+1].s-1); //res[cow[i].i]=res[cow[i+1].i]; } else { res[cow[i].i]=getsum(cow[i].s); } update(cow[i].s,1); } for(int i=1;i<n;i++) cout<<res[i]<<" "; cout<<res[n]<<endl; } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator