标签:
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 13036 Accepted Submission(s): 7968
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #include <iostream> 5 #include <vector> 6 #include <queue> 7 #include <cmath> 8 #include <set> 9 using namespace std; 10 11 #define N 5005 12 #define ll root<<1 13 #define rr root<<1|1 14 #define mid (a[root].l+a[root].r)/2 15 16 17 int max(int x,int y){return x>y?x:y;} 18 int min(int x,int y){return x<y?x:y;} 19 int abs(int x,int y){return x<0?-x:x;} 20 21 int n; 22 int b[N]; 23 int a[N]; 24 25 int lowbit(int x){ 26 return x&(-x); 27 } 28 29 void solve(int val,int x){ 30 while(x<=n){ 31 a[x]+=val; 32 x+=lowbit(x); 33 } 34 } 35 36 int sum(int x){ 37 int ans=0; 38 while(x>0){ 39 ans+=a[x]; 40 x-=lowbit(x); 41 } 42 return ans; 43 } 44 45 main() 46 { 47 int t, i, j, k; 48 while(scanf("%d",&n)==1){ 49 memset(a,0,sizeof(a)); 50 int ans=0; 51 for(i=1;i<=n;i++) { 52 scanf("%d",&b[i]); 53 b[i]++; 54 ans+=sum(n)-sum(b[i]); 55 solve(1,b[i]); 56 } 57 int num=ans; 58 for(i=1;i<=n;i++){ 59 num+=n-b[i]-b[i]+1;//sum(n)-sum(b[i])-sum(b[i]-1); 60 ans=min(ans,num); 61 } 62 printf("%d\n",ans); 63 } 64 }
标签:
原文地址:http://www.cnblogs.com/qq1012662902/p/4527429.html