poj 2481 树状数组
2011-08-06 21:27
351 查看
//解法2:按Si值做降序排序后,相当于求每个位置i左边大于等于E[i]的个数 //树状数组更新节点的路径和求和的路径要改变,getSum(i)相当于求i+(i+1)+...+MAXN #include<iostream> #include<algorithm> usingnamespacestd; constintMAXN=100010; intsum[MAXN]; structCow { ints; inte; intid; intval; }cow[MAXN]; boolcmp1(conststructCowa,conststructCowb) { if(a.s==b.s) { returna.e>b.e; } returna.s<b.s; } boolcmp2(conststructCowa,conststructCowb) { returna.id<b.id; } intlowbit(intx) { returnx&(-x); } //更新节点的路径改变 voidupdate(intx,intval) { for(inti=x;i>0;i-=lowbit(i)) { sum[i]+=val; } } //求和的路径改变sum[4]=num[4]+num[5]+num[6]+num[7],sum[2]=num[2]+num[3].... intgetSum(intx) { ints=0; for(inti=x;i<MAXN;i+=lowbit(i)) { s+=sum[i]; } returns; } intmain() { intn; while(cin>>n,n) { memset(sum,0,sizeof(sum)); for(inti=0;i<n;i++) { scanf("%d%d",&cow[i].s,&cow[i].e); cow[i].s++; cow[i].e++; cow[i].id=i; } sort(cow,cow+n,cmp1); cow[0].val=0; update(cow[0].e,1); for(inti=1;i<n;i++) { if(cow[i].s==cow[i-1].s&&cow[i].e==cow[i-1].e) { cow[i].val=cow[i-1].val; } else { cow[i].val=getSum(cow[i].e); } update(cow[i].e,1); } sort(cow,cow+n,cmp2); for(inti=0;i<n-1;i++) { cout<<cow[i].val<<""; } cout<<cow[n-1].val<<endl; } return0; }
//poj2481树状数组.cpp:定义控制台应用程序的入口点。//题目要得到满足Si<=SjandEi>=EjandEi-Si>Ej-Sj(Si!=Sj&&Ei!=Ej)的个数//解法1:若按Ei值升序排序后,则相当于求每个位置i左边小于等于S[i]的个数.
解法2:按Si值做降序排序后,相当于求每个位置i左边大于等于E[i]的个数 树状数组更新节点的路径和求和的路径要改变,getSum(i)相当于求i+(i+1)+...+MAXN #include<iostream> #include<algorithm> usingnamespacestd; constintMAXN=100010; intsum[MAXN]; structCow { ints; inte; intid; intval; }cow[MAXN]; boolcmp1(conststructCowa,conststructCowb) { if(a.s==b.s) { returna.e>b.e; } returna.s<b.s; } boolcmp2(conststructCowa,conststructCowb) { returna.id<b.id; } intlowbit(intx) { returnx&(-x); } //更新节点的路径改变 voidupdate(intx,intval) { for(inti=x;i>0;i-=lowbit(i)) { sum[i]+=val; } } //求和的路径改变sum[4]=num[4]+num[5]+num[6]+num[7],sum[2]=num[2]+num[3].... intgetSum(intx) { ints=0; for(inti=x;i<MAXN;i+=lowbit(i)) { s+=sum[i]; } returns; } intmain() { intn; while(cin>>n,n) { memset(sum,0,sizeof(sum)); for(inti=0;i<n;i++) { scanf("%d%d",&cow[i].s,&cow[i].e); cow[i].s++; cow[i].e++; cow[i].id=i; } sort(cow,cow+n,cmp1); cow[0].val=0; update(cow[0].e,1); for(inti=1;i<n;i++) { if(cow[i].s==cow[i-1].s&&cow[i].e==cow[i-1].e) { cow[i].val=cow[i-1].val; } else { cow[i].val=getSum(cow[i].e); } update(cow[i].e,1); } sort(cow,cow+n,cmp2); for(inti=0;i<n-1;i++) { cout<<cow[i].val<<""; } cout<<cow[n-1].val<<endl; } return0; }
相关文章推荐
- POJ 2481 树状数组
- POJ 2352_Stars && POJ-2481 Cows (线段树单点更新+树状数组)
- POJ 2481 Cows 树状数组
- POJ-2481 Cows 树状数组
- POJ 2481 Cows (线段树||树状数组)
- poj 2481 树状数组
- poj_2481,Cows,树状数组
- POJ 2481 Cows 树状数组
- 树状数组 POJ 2481 Cows
- POJ 2481 树状数组
- poj2481 树状数组
- 树状数组 POJ 2481 Cows
- poj2481-树状数组的应用
- poj 2481 树状数组
- poj 2481 cows 树状数组
- Cows - POJ 2481 树状数组
- POJ2481 Cows 树状数组
- POJ 2481 Cows 树状数组
- POJ 2481 树状数组(Binary Indexed Tree)
- poj 2481 比壮的牛 树状数组