麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

【藍橋杯】小朋友排隊

2019-11-14 10:31:41
字體:
來源:轉載
供稿:網友
#include <iostream>#include <algorithm>#include <vector>using namespace std;/* * 題目最終歸結到求每個數的逆序對的個數,逆序對的個數有多少個該數就要交換多少次 * 方法:歸并求逆序對的個數,求出每個數的逆序對的個數num * 步驟:先求小區間中的每個數的num,再回溯合并兩個小區間為一個大區間并更新大區間中每個數的num*/struct Node{ long long int value, num;//num為與value相關的逆序對的個數總和(value前面比它大的數的個數+value后面比它小的數的個數)};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從哪兒開始無所謂,我們這兒從s開始 while (i <= mid&&j <= e) { //將數合并到temp中之前計算這個數的逆序對的個數(更新) 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],個數為j-mid-1個 else a[j].num += mid - i + 1, temp[k++] = a[j++];//[ a[i],a[mid] ]都大于a[j],個數為mid-i+1個 } while (i <= mid) a[i].num += e - mid, temp[k++] = a[i++];//前半部分有剩余時,說明它比后半部分所有數都大,逆序對的個數增加,且都增加e-mid個 for (i = s; i < k; i++)//寫回原容器,為下次更新準備 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;}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 欧美成人国产va精品日本一级 | 成人免费一区二区三区在线观看 | 精品三区视频 | 国产成人精品免费视频大全最热 | 精品久久久91 | 日韩深夜视频 | 毛片在线免费 | 91精品免费观看 | 一级免费黄色 | 免费在线观看午夜视频 | 国产色爱综合网 | 欧美高清另类自拍视频在线看 | 国产午夜精品一区二区三区视频 | 久久久三级免费电影 | 国产午夜精品一区二区三区嫩草 | 欧美日韩在线播放一区 | 看免费av| 精品国产一区二区三区久久久蜜月 | 七首小情歌泰剧在线播放 | 久久草在线视频 | 噜噜色av| 成人毛片免费 | 依人在线视频 | 亚洲成人第一页 | 免费中文视频 | 国产精品成人av片免费看最爱 | 国产一区网址 | 欧美雌雄另类xxxxx | 国产一区国产二区在线观看 | 国产二区三区在线播放 | 久久精品免费国产 | 成年人黄视频 | 羞羞色网站| chinese18 xxxx videos | 成人午夜a | 亚洲国产超高清a毛毛片 | 最新午夜综合福利视频 | 污污网站入口 | 国产精品99一区二区 | 999久久久国产999久久久 | 久久欧美亚洲另类专区91大神 |