time limit: 1 second
memory limit: 128 mb
【問題描述】
破解了符文之語,小ff開啟了通往地下的道路。當他走到最底層時,發現正前方有一扇巨石門,門上雕刻著一幅古代人進行某種活
動的圖案。而石門上方用古代文寫著「神的殿堂」。小ff猜想裡面應該就有王室的遺產了。但現在的問題是如何開啟這扇門…
… 仔細研究後,他發現門上的圖案大概是說:古代人認為只有智者才是最容易接近神明的。
而最聰明的人往往通過一種儀式選拔出來。儀式大概是指,即將隱退的智者為他的候選人寫下一串無序的數字,並讓他們進行一種
操作,即交換序列中相鄰的兩個元素。而用最少的交換次數使原序列變成不下降序列的人即是下一任智者。
小ff發現門上同樣有著n個數字。於是他認為開啟這扇門的秘訣就是找到讓這個序列變成不下降序列所需要的最小次數。但小ff
不會……只好又找到了你,並答應事成之後與你三七分……
樣例說明:開始序列為2 8 0 3,目標序列為0 2 3 8,可進行三次操作的目標序列:
1. swap(8,0):2 0 8 3
2. swap (2,0):0 2 8 3
3. swap (8,3):0 2 3 8
【資料範圍】
對於30%的資料1≤n≤104。
對於100%的資料 1≤n≤5*10
【輸入格式】
第一行為乙個整數n,表示序列長度
第二行為n個整數,表示序列中每個元素。
【輸出格式】
乙個整數ans,即最少操作次數。
sample input
4 2 8 0 3
sample output
【題目鏈結】:
【題解】
把n個數字變成有序;(只能交換相鄰的數字);
考慮n個數字中最大的位置(最後要換到最後乙個位置);
肯定是乙個乙個往後換(因為是最大的,所以就是它後面的逆序對個數比它小卻在它後面的數字的個數);
然後把那個數字剔除掉(變成n-1個數字);
在這n-1個數字裡面再找乙個最大的(重複上述過程);
這個時候原來那個最大的數字已經去掉了;
所以這個原本第二大的元素(現在變成最大的了);
它也要放在第n-1個位置;
則它需要往後交換的次數也是它的逆序對個數(那個最大的數肯定不在它的逆序對裡面,因為如果是最大的,那它不可能滿足在它後面且比它小這個條件->現在你是第二大的!);
因為我們在做上面這個事情的過程中,不斷把最大的數字返回到它應有的位置,而那些不該在那麼後面的元素也被相應的交換到了前面(所以咱們沒有做任何一件無意義的事情;所以我們得到的是最優解,渣渣只能這樣騙自己了);
給個例子
在4個數中找最大的
4 9 5 2
9先移->9的逆序數為2;
4 5 2 9
然後不看9了;
在前3個數字中找最大的
5的逆序數為1;
4 2 5 9
…. 就算9在5的後面,5的逆序數也是1!
逆序對用歸併排序搞就好;
再給個線段樹的鏈結
【完整**】
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define ll long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
typedef pair pii;
typedef pairpll;
void rel(ll &r)
void rei(int &r)
const
int maxn = 5*10e5+100;
const
int dx[5] = ;
const
int dy[5] = ;
const
double pi = acos(-1.0);
int n;
ll ans = 0,a[maxn],temp[maxn];
void mergesort(int l,int r)
int main()
P1774 最接近神的人
這個人當然是我啦,皮 破解了符文之語,小ff開啟了通往地下的道路。當他走到最底層時,發現正前方有一扇巨石門,門上雕刻著一幅古代人進行某種活動的圖案。而石門上方用古代文寫著 神的殿堂 小ff猜想裡面應該就有王室的遺產了。但現在的問題是如何開啟這扇門 仔細研究後,他發現門上的圖案大概是說 古代人認為只有...
UOJ 51 最接近神的人
題目描述 破解了符文之語,小ff開啟了通往地下的道路。當他走到最底層時,發現正前方有一扇巨石門,門上雕刻著一幅古代人進行某種活動的圖案。而石門上方用古代文寫著 神的殿堂 小ff猜想裡面應該就有王室的遺產了。但現在的問題是如何開啟這扇門 仔細研究後,他發現門上的圖案大概是說 古代人認為只有智者才是最容...
洛谷P1774 最接近神的人
用類似於桶的方法,樹狀陣列記錄原序列的某位置之前已經插入了多少個數,插入時樹狀陣列單點加1即可 先排一遍序,從大到小插入所有數在原序列的位置,統計每次插入時,在該元素前面元素的個數,前面的元素是先插入的,比該元素大,而在序列中的位置靠前,所以這個字首和是逆序對數 include include in...