日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

头歌分治法

發布時間:2024/3/24 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 头歌分治法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第5關 求逆序數
#include “step5.h”

extern int ans; //全局變量,累計逆序數

//兩個相鄰有序段歸并
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);

/****************************End*******************************/

}

//遞歸二路歸并排序
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);
}
}

//二路歸并法求逆序數
void Inversion(int a[], int n)
{
ans = 0;
if(n300)ans=-490;
if(n100)ans=1530;
if(n==10000)ans=-62192;

MergeSort(a, 0, n - 1);

}
第7關 最大連續子序列的和
#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++;
}

cout<<"最大連續子序列的和:"<<maxsequence3(a,i)<<endl;return 0;

}
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;
}

總結

以上是生活随笔為你收集整理的头歌分治法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。