UVA 11525 好大好大的排列(線段樹)

2021-07-10 10:07:14 字數 928 閱讀 3422

題目在這

題意:求1-k的排列中第n大的序列,題目給出n的計算方法:

n = si*(k-1)+s2*(k-2)…+sk*0!; 並給你s1~sk

**分析:**n好大好大,,,,,

n是給的乙個乙個的階乘和,想想:k位的排列數是k!

從0!到(k-1)!,,,似乎,對應著什麼

每乙個s[i]對應全排列的一位數字

(蚊子數學太弱,,,證明什麼的,,,額)

不過看到乙個乙個階乘還是可以yy出這麼乙個寫法的:

每讀入乙個s[i],選取剩下的數中第s[i]+1小的,

有點拗口是吧,,,拿樣例模擬模擬,就搞出來了

k很大,有5w,如果每次都赤裸裸的找的話,

平方複雜度必然tle,開個線段樹吧,

權值是0或1,1表示沒被用過,0表示被用過了

維護區間和。。。。每次取剩下的第s[i]+1個數

#include

#include

#include

#include

using

namespace

std;

const

int n=140000;

int ans;

struct tree

}void get(int t,int k,int sum)

int mid=(l[t]+r[t])>>1;

if (sum+su[t<<1]>=k)get(t<<1,k,sum);

else get(t<<1^1,k,sum+su[t<<1]);

su[t]=su[t<<1]+su[t<<1^1];

}}t;int main()

puts("");

}return

0;}

UVA 11525 好大好大的排列(線段樹)

題目在這 題意 求1 k的排列中第n大的序列,題目給出n的計算方法 n si k 1 s2 k 2 sk 0 並給你s1 sk 分析 n好大好大,n是給的乙個乙個的階乘和,想想 k位的排列數是k!從0!到 k 1 似乎,對應著什麼 每乙個s i 對應全排列的一位數字 蚊子數學太弱,證明什麼的,額 不...

UVA 11525 好大好大的排列(線段樹)

題目在這 題意 求1 k的排列中第n大的序列,題目給出n的計算方法 n si k 1 s2 k 2 sk 0 並給你s1 sk 分析 n好大好大,n是給的乙個乙個的階乘和,想想 k位的排列數是k!從0!到 k 1 似乎,對應著什麼 每乙個s i 對應全排列的一位數字 蚊子數學太弱,證明什麼的,額 不...

外面下了好大的雨

外面下了好大的雨!走進書店,手指劃過一排排被封印著的書,各種各樣的書籍,我有些頭暈。手指劃過一草的 畢業後我們一無所有 的時候,停了下來。不知道為什麼,突然很想哭。無關天氣,無關心情。突然發現自己很可悲。走過那麼多的路,看過那麼多的事,見過那麼多的人,卻沒有一樣是屬於自己的。我,什麼都沒有。18年,...