标签:style color strong os for io
Input
The first line is an integer N (N <= 50000). The second line contains N integer(s): A1, A2, ..., An(0 <= Ai <= 32768).
Output
There is only one number, which is the the number of different collocation.
Sample Input
5
1 2 3 4 1
Sample Output
6
题目就是统计序列中Ai < Aj > Ak(i < j < k)的个数,可以从前往后统计每个元素之前小于它的数的个数,在从后往前统计每个元素之后小于它的数的个数。然后乘积加和即可。用树状数组轻松搞定!!
AC代码如下:
#include<iostream> #include<cstdio> #include<cstring> #define M 50010 using namespace std; int c[M],num[M]; int l[M],n; int lowbit(int a) { return a&-a; } void add(int a,int b) { while (a<M) { c[a]+=b; a+=lowbit (a); } } int sum(int a) { int ans=0; while(a>0) { ans+=c[a]; a-=lowbit(a); } return ans; } int main () { int i,j; int a,b; while(~scanf("%d",&n)) { memset(c,0,sizeof c); memset(num,0,sizeof num); for(i=1;i<=n;i++) { scanf("%d",&num[i]); l[i]=sum(num[i]-1); add(num[i],1); } memset(c,0,sizeof c); long long ans=0; for(i=n;i>=1;i--) { ans=ans+(long long)sum(num[i]-1)*l[i]; add(num[i],1); } printf("%lld\n",ans); } return 0; }
hoj 2275 Number sequence,布布扣,bubuko.com
标签:style color strong os for io
原文地址:http://blog.csdn.net/hanhai768/article/details/37818343