国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

【藍(lán)橋杯】小朋友排隊(duì)

2019-11-14 11:54:11
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
#include <iostream>#include <algorithm>#include <vector>using namespace std;/* * 題目最終歸結(jié)到求每個(gè)數(shù)的逆序?qū)Φ膫€(gè)數(shù),逆序?qū)Φ膫€(gè)數(shù)有多少個(gè)該數(shù)就要交換多少次 * 方法:歸并求逆序?qū)Φ膫€(gè)數(shù),求出每個(gè)數(shù)的逆序?qū)Φ膫€(gè)數(shù)num * 步驟:先求小區(qū)間中的每個(gè)數(shù)的num,再回溯合并兩個(gè)小區(qū)間為一個(gè)大區(qū)間并更新大區(qū)間中每個(gè)數(shù)的num*/struct Node{ long long int value, num;//num為與value相關(guān)的逆序?qū)Φ膫€(gè)數(shù)總和(value前面比它大的數(shù)的個(gè)數(shù)+value后面比它小的數(shù)的個(gè)數(shù))};void Merge(vector<Node>&a, int s, int e, vector<Node>&temp){ int mid = (s + e) / 2; int i = s, j = mid + 1; int k = s;//k從哪兒開始無(wú)所謂,我們這兒從s開始 while (i <= mid&&j <= e) { //將數(shù)合并到temp中之前計(jì)算這個(gè)數(shù)的逆序?qū)Φ膫€(gè)數(shù)(更新) if (a[i].value <= a[j].value) a[i].num += j - mid - 1, temp[k++] = a[i++];//[ a[mid+1],a[j-1] ]都小于a[i],個(gè)數(shù)為j-mid-1個(gè) else a[j].num += mid - i + 1, temp[k++] = a[j++];//[ a[i],a[mid] ]都大于a[j],個(gè)數(shù)為mid-i+1個(gè) } while (i <= mid) a[i].num += e - mid, temp[k++] = a[i++];//前半部分有剩余時(shí),說(shuō)明它比后半部分所有數(shù)都大,逆序?qū)Φ膫€(gè)數(shù)增加,且都增加e-mid個(gè) for (i = s; i < k; i++)//寫回原容器,為下次更新準(zhǔn)備 a[i] = temp[i];}/** 遞歸二分*/void MergeSort(vector<Node>&a, int s, int e, vector<Node>&temp){ if (s < e) { int mid = (s + e) / 2; MergeSort(a, s, mid, temp); MergeSort(a, mid + 1, e, temp); Merge(a, s, e, temp); }}int main(){ int n; while (cin >> n) { vector<Node>a(n); vector<Node>temp(n); for (int i = 0; i < n; i++) cin >> a[i].value, a[i].num = 0; MergeSort(a, 0, n - 1, temp); long long int ans = 0; for (int i = 0; i < n; i++) ans += a[i].num*(a[i].num+1)/2; cout << ans << endl; } return 0;}
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 昌邑市| 滦南县| 伊春市| 高平市| 抚远县| 安宁市| 贵溪市| 双桥区| 通化市| 疏勒县| 金平| 衡水市| 通化县| 洪雅县| 贵定县| 阿城市| 太仓市| 垣曲县| 应城市| 顺平县| 鄄城县| 庆阳市| 桦南县| 山阴县| 泰州市| 浙江省| 乌拉特中旗| 岳普湖县| 石河子市| 渝北区| 尉氏县| 凌海市| 思茅市| 寿光市| 正蓝旗| 柘荣县| 镇安县| 九台市| 永安市| 昌邑市| 呼和浩特市|