hdu 4000 Fruit Ninja 树状数组
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4000
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cstdlib> 5 #include<cmath> 6 #include<algorithm> 7 #define inf 0x7fffffff 8 using namespace std; 9 typedef long long LL; 10 const int maxn=100000+10; 11 const int MOD=100000007; 12 13 int n,an[maxn]; 14 LL x[maxn]; 15 16 int lowbit(int u) {return u&(-u); } 17 void add(int i,int dd) 18 { 19 while (i<=maxn) 20 { 21 x[i] += dd; 22 i += lowbit(i); 23 } 24 } 25 LL sum(int i) 26 { 27 LL ret=0; 28 while (i>0) 29 { 30 ret += x[i]; 31 i -= lowbit(i); 32 } 33 return ret; 34 } 35 36 int main() 37 { 38 int t,ncase=1;scanf("%d",&t); 39 while (t--) 40 { 41 scanf("%d",&n); 42 for (int i=1 ;i<=n ;i++) scanf("%d",&an[i]); 43 memset(x,0,sizeof(x)); 44 LL ans=0; 45 for (int i=1 ;i<=n ;i++) 46 { 47 add(an[i],1); 48 LL temp1=sum(an[i]-1); 49 LL temp2=n-an[i]-((i-1)-temp1); 50 ans -= temp1*temp2; 51 if (temp2>=2) ans += (temp2-1)*temp2/2; 52 } 53 printf("Case #%d: %I64d\n",ncase++,ans%MOD); 54 } 55 return 0; 56 }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。