【树状数组】hdu 4000
2011-09-07 14:06
375 查看
给出一个1~N的序列,问有多少组x<z<y
方法:树状数组,先求出xyz+xzy的个数,很简单,算出比ai大的个数,比ai小的个数,这个用树状数组实现,开始想的时候是倒过来建树的,即下标n~1顺序,发现没必要,顺序也可以,求出比ai小的个数p,然后草稿纸算算,算出比ai大的个数是(n-i-a[i]+p){求这个式子过程:比ai小的个数是p,按理来说有ai-1个比ai小的数,那么肯定有ai-1-p个比ai小的在ai右面,占据了ai-1-p个位置,然后ai右面剩下n-(i+1)个空位,所以右面比ai大的个数有n-(i+1)-(ai-1-p)=(n-i-a[i]+p)个,注意我的下标由0开始},求出比ai大和比ai小后就可以接着算。
方法:树状数组,先求出xyz+xzy的个数,很简单,算出比ai大的个数,比ai小的个数,这个用树状数组实现,开始想的时候是倒过来建树的,即下标n~1顺序,发现没必要,顺序也可以,求出比ai小的个数p,然后草稿纸算算,算出比ai大的个数是(n-i-a[i]+p){求这个式子过程:比ai小的个数是p,按理来说有ai-1个比ai小的数,那么肯定有ai-1-p个比ai小的在ai右面,占据了ai-1-p个位置,然后ai右面剩下n-(i+1)个空位,所以右面比ai大的个数有n-(i+1)-(ai-1-p)=(n-i-a[i]+p)个,注意我的下标由0开始},求出比ai大和比ai小后就可以接着算。
#include <map> #include <set> #include <list> #include <queue> #include <deque> #include <stack> #include <string> #include <time.h> #include <cstdio> #include <math.h> #include <iomanip> #include <cstdlib> #include <limits.h> #include <string.h> #include <iostream> #include <algorithm> using namespace std; #define LL long long #define PI acos(-1.0) #define FRE freopen("a.txt","r",stdin) #define MAX INT_MAX #define MIN INT_MIN #define eps 1e-10 #define MOD 100000007 #define N 100005 LL c ; int a ; int lowbit(int t){ return t&(-t); } LL sum(int x){ LL tot=0; while(x){ tot+=c[x]; x-=lowbit(x); } return tot; } void add(int x){ while(x<N){ c[x]+=1; x+=lowbit(x); } } int main(){FRE; int t; scanf("%d",&t); int ca; for(ca=1;ca<=t;ca++){ //memset(c,0,sizeof(c)); int n; scanf("%d",&n); int i,j; for(i=0;i<=n;i++)c[i]=0; for(i=0;i<n;i++)scanf("%d",&a[i]); LL s1=0,s2=0; for(i=0;i<n;i++){ LL p=sum(a[i]);//the number less than a[i] s2+=(n-i-a[i]+p)*p;//x<y<z s1+=(n-i-a[i]+p)*(n-i-a[i]+p-1)/2; add(a[i]); } printf("Case #%d: %I64d\n",ca,(s1-s2)%MOD); } return 0; }
相关文章推荐
- hdu4000-树状数组-2
- hdu 4000 - Fruit Ninja(树状数组)
- hdu4000 Fruit Ninja(树状数组)
- HDU 4000 Fruit Ninja (树状数组+反向思维)
- HDU 4000 Fruit Ninja(树状数组)
- hdu 4000 Fruit Ninja(树状数组)
- HDU 4000 Fruit Ninja[树状数组]
- HDU - 4000 - Fruit Ninja (树状数组)
- HDU 4000 Fruit Ninja && HLG 1625 ikki的数字 (树状数组)
- 【HDU 4000】 树状数组
- hdu 4000 Fruit Ninja(树状数组)
- HDU 4000 Fruit Ninja 树状数组 + 计数
- HDU 4000 Fruit Ninja(树状数组)
- hdu 4000 Fruit Ninja(树状数组)
- HDU 4000 Fruit Ninja (树状数组+组合问题)
- HDU 4000 Fruit Ninja(树状数组)
- HDU 4000 Fruit Ninja 【树状数组】
- hdu4000 Fruit Ninja(树状数组)
- hdu 5877 Weak Pair(树状数组 + dfs + 离散化)
- HDU 1541 Stars(树状数组)