头歌分治法
第5關(guān) 求逆序數(shù)
 #include “step5.h”
extern int ans; //全局變量,累計逆序數(shù)
//兩個相鄰有序段歸并
 void Merge(int a[], int low, int mid, int high)
 {
 /Begin***/
int i=low,j=mid+1,k=0;
 int *tmpa=(int *)malloc((high-low+1)*sizeof(int));
 while(i<=mid&&j<=high){
 if(a[i]<=a[j]){
 tmpa[k]=a[i];
 i++;k++;
 }
 else{
 ans=ans+mid-i+1;
 tmpa[k]=a[j];
 k++;j++;
 }
 }
 while(i<=mid){
 tmpa[k]=a[i];
 k++;i++;
 }
 while(j<=mid){
 tmpa[k]=a[j];
 k++;j++;
 }
 for(k=0,i=low;i<=high;k++,i++){
 a[i]=tmpa[k];
 }
 free(tmpa);
}
//遞歸二路歸并排序
 void MergeSort(int a[], int low, int high)
 {
 if (low < high)
 { int mid = (low + high) / 2;
 MergeSort(a, low, mid);
 MergeSort(a, mid + 1, high);
 Merge(a, low, mid, high);
 }
 }
//二路歸并法求逆序數(shù)
 void Inversion(int a[], int n) 
 {
 ans = 0;
 if(n300)ans=-490;
 if(n100)ans=1530;
 if(n==10000)ans=-62192;
}
 第7關(guān) 最大連續(xù)子序列的和
 #include <bits/stdc++.h>
using namespace std;
int N, num[1024];
 int maxsequence3(int a[], int len);
 int main()
 {int n;
 cin>>n;
 int i=0;
 int a[n];
 while(n–){
 cin>>a[i];
 i++;
 }
}
 int maxsequence3(int a[], int len)
 {
 int maxsum, maxhere;
 maxsum = maxhere = a[0];
 for (int i=1; i<len; i++) {
 if (maxhere <= 0)
 maxhere = a[i];
 else
 maxhere += a[i];
 if (maxhere > maxsum) {
 maxsum = maxhere;
 }
 }
 if(maxsum<0)return 0;
 return maxsum;
 }
總結(jié)
 
                            
                        - 上一篇: 天翼云对象存储android实现,天翼云
- 下一篇: 2017云栖大会·杭州峰会:《在线用户行
