用手中的数与数组中的数交换,手中的数一定是越来越小的。同时要让数组中的数单调不减,首先就要让最后一个数最大,而如果最后一个数不是最大,唯一改变它的方法就是与手中的数字进行交换。于是手中的数就变为了最后一个数。对于第n−1,n−2,...个数同理。
于是从最后一个数开始判断,如果比手中数小,那么就进行交换,同时与前面的数比较,如果逆序,则记录该逆序对。
交换后,与前后两个数进行比较,检查能否删除记录过的逆序对。如果最后没有记录中的逆序对,则说明可以实现,否则不能。
塔塔携带一件价值为x的礼物参加了一个节日派对。除多多外在场的有n个人,第i个人的当前持有的礼物价值为ai。
塔塔可以和任意当前持有礼物价值比塔塔低的人交换礼物。
请问最少经过多少次交换,可以使得n个人持有的礼物价值形成单调不减的数列。
(a1≤a2≤...≤an)
第一行输入两个数字n和x,x代表人数、和塔塔最多持有的礼物价值。
第二行n个数字a1,a2,...an,代表其他所有人最初持有的礼物价值
对于60%的数据,1≤n≤103
对于100%的数据,1≤n≤2∗106,1≤x,ai≤109
输出一个数字,代表为了达成目标最少进行的交换次数。
如果无法达成目标则输出−1
输入
5 5
2 1 3 2 4
输出
3
说明
最初塔塔的礼物价值为5
第1次选择和第5个人交换。交换后塔塔的礼物价值为4,其他人为{2,1,3,2,5}
第2次选择和第4个人交换。交换后塔塔的礼物价值为2,其他人为{2,1,3,4,5}
第3次选择和第2个人交换。交换后塔塔的礼物价值为1,其他人为{2,2,3,4,5}