Advertisement
DASBD72

125

Apr 18th, 2019
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 0.88 KB | None | 0 0
  1. #include<stdio.h>
  2. #define MAXN 10000019
  3. int N;
  4. long long arr[1000005],tmparr[1000005],ans;
  5. void MS(int,int);
  6. int main(){
  7.     scanf("%d",&N);
  8.     for(int iN=0;iN<N;iN++){
  9.         scanf("%lld",&arr[iN]);
  10.     }
  11.     ans=0;
  12.     MS(0,N-1);
  13.     printf("%lld\n",ans%MAXN);
  14. }
  15. void MS(int first,int last){
  16.     if(first==last)return;
  17.     int mid=(first+last)/2;
  18.     int fi=first,mi=mid+1,i=0,set;
  19.     long long tot=0,num=0;
  20.     MS(first,mid);
  21.     MS(mid+1,last);
  22.     for(int j=fi;j<=mid;j++){
  23.         tot+=arr[j];
  24.         num++;
  25.     }
  26.     while(fi<=mid&&mi<=last){
  27.         if(arr[fi]>arr[mi]){
  28.             ans+=tot;
  29.             ans+=arr[mi]*num;
  30.             tmparr[i++]=arr[mi++];
  31.         }
  32.         else if(arr[fi]<=arr[mi]){
  33.             tot-=arr[fi];
  34.             num--;
  35.             tmparr[i++]=arr[fi++];
  36.         }
  37.     }
  38.     if(fi<=mid)while(fi<=mid)
  39.         tmparr[i++]=arr[fi++];
  40.     else if(mi<=last)while(mi<=last)
  41.         tmparr[i++]=arr[mi++];
  42.     for(i=0,set=first;set<=last;set++,i++){
  43.         arr[set]=tmparr[i];
  44.     }
  45.     ans%=MAXN;
  46. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement