洛谷每日一練5 12 P1338 逆序對

2021-10-06 02:10:53 字數 1205 閱讀 6891

題目描述

只要是參加 jsoi 活動的同學一定都聽說過 hanoi 塔的傳說:三根柱子上的金片每天被移動一次,當所有的金片都被移完之後,世界末日也就隨之降臨了。

在古老東方的幻想鄉,人們都採用一種奇特的方式記錄日期:他們用一些特殊的符號來表示從 1 開始的連續整數,1 表示最小而 n 表示最大。創世紀的第一天,日曆就被賦予了生命,它自動地開始計數,就像排列不斷地增加。

我們用 1-n 來表示日曆的元素,第一天日曆就是:

1,2,…,n−2,n−1,n

第二天,日曆自動變為

1,2,…,n−2,n,n−1······

每次它都生成乙個以前未出現過的「最小」的排列——把它轉為 n+1 進製後數的數值最小。

日子一天一天地過著。有一天,一位預言者出現了——他預言道,當這個日曆到達某個上帝安排的時刻,這個世界就會崩潰······他還預言到,假如某乙個日期的逆序達到乙個值 m 的時候,世界末日就要降臨。

什麼是逆序?日曆中的兩個不同符號,假如排在前面的那個比排在後面的那個更大,就是乙個逆序,乙個日期的逆序總數達到 m 後,末日就要降臨,人們都期待乙個賢者,能夠預見那一天到底將在什麼時候到來?

輸入格式

只包含一行兩個正整數,分別為 n 和 m。

輸出格式

輸出一行,為世界末日的日期,每個數字之間用乙個空格隔開。

輸入輸出樣例

輸入 #1

5 4輸出 #1

1 3 5 4 2

說明/提示

對於 10% 的資料有 n≤10;

對於 40% 的資料有 n≤1000;

對於 100% 的資料有 n≤5×10 ^4 。

所有資料均有解。

求逆序對為m的字典序最小的排列。首先按照字典序最小排列,從1到n,同時要讓逆序對最多為m,從n向前取出數字,降序排列。設p=n,對n位置進行調整,使逆序對為m。先找到p,按順序輸出p之前的數字,求p往後的逆序對個數,n的位置輸出p+c,再逆序輸出從p到n的數。

#include

intmain()

p--;}

for(

int i=

1; i)printf

("%d "

,p+c)

;for

(int i=n; i>=p; i--

)return0;

}

求逆序對的方法有 : 歸併排序、線段樹、樹狀陣列(我都不會)

每日一練4

員工表emp 員工編號eid,姓名ename,工作職位title,僱傭日期hiretime,工資salary,獎金bonus,部門depart 部門表dept 部門編號did,名稱dname,部門領導leader 員工資料 1001,張三 銷售 1999 12 1 3000.0,1100.0,102...

每日一練25

請描述 mysql 從安裝到配置的全部詳細過程 確保一台新電腦可以順利使用 mysql mysql安裝嚮導啟動,按 next 繼續 選擇安裝型別,有 typical 預設 complete 完全 custom 使用者自定義 三個選項,我們選擇 custom 有更多的選項,也方便熟悉安裝過程 選擇配置...

每日一練 13

談談你對ajax 的理解?概念 特點 作用 select 教師號,sum case when 星期號 1 and 是否有課 有 then 1 else 0 end as 星期一,sum case when 星期號 2 and 是否有課 有 then 1 else 0 end as 星期二,sum c...