description
很久很久以前,有乙個1~n 的排列a,還有乙個長度為q 的,每個元素在1
到n 之間的序列b[0]…b[q-1]。
作為一道簡單模擬題,你需要模擬m 次操作,第i(1 到m)次操作你會在
a 中找到值為b[(i-1)%q]的元素,並把它與第乙個元素交換。
你只需要輸出m 次操作之後的序列即可
input
第一行三個整數n、q、m。
第二行n 個整數表示排列a。
第二行q 個整數表示序列b。
output
一行n 個整數,表示m 次操作後的排列。
data constraint
subtask 1,10pts,1<=n,q,m<=100。
subtask 2,10pts,1<=n,q,m<=5000。
subtask 3,20pts,1<=n=q<=5000,1<=m<=10^18,b[i]=i+1。
subtask 4,20pts,1<=n=q<=200000,1<=m<=10^18,b[i]=i+1。
subtask 5,40pts,1<=n,q<=200000,1<=m<=10^18。
sol :發現這是乙個置換,那麼,我們把n次操作看成乙個置換,對其快速冪,再暴力。
#includeusingnamespace
std;
#define n 200007
struct
node
void
res()
}c,anw;
#define sight(x) ('0'<=x&&x<='9')template
inline
void read(t &x)
void write(int x) write(x/10); putchar('
0'+x%10
);}inline
void writeln(int x)
inline
void writel(int x)
node
operator * (const node x,const
node y)
long
long
m,y;
intn,q,a[n],b[n],st,pos[n],top,ang[n],ans[n];
signed main ()
JZOJ 交換 模擬
給出字串s和字串t,現在你要把s的某乙個字元和t的某乙個字元交換,使得交換之後的s至少要有三個連續相同的字元,交換之後的t也要有三個連續相同的字元。問有多少種不同的交換方式。第一行,乙個字串s。s只含有 r g b 三種字元,長度不超過50,不小於3。而且s任意兩個相鄰的字元都不相同。第二行,乙個字...
模擬 遊戲(jzoj 1614)
有乙個n n的棋盤,有乙個座標在x,y的棋子,1 2號玩家可以將他向左,向下,向左下 45 45 45 移動若干格,假如他們都是akioi聰明絕頂的巨佬,請問1號玩家先出,誰可以將棋子移到1,1,他的x是從上往下的6 2 4230 n 500 50 n 2000 80 n 10000 100 n 1...
JZOJ 奶牛的歌聲 模擬
farmer john的n頭奶牛喜歡站成一排一起唱歌。每頭奶牛都有自己獨特的身高h,唱歌時的音量為v。每頭奶牛的歌聲都會從牠所在的位置出發,向佇列的兩邊傳播。並且有乙個奇特的事情 當某頭奶牛唱歌時,整個隊伍中,在左右兩個方向上,只有身高比牠高且與牠最接近的奶牛能聽見牠的歌聲 也就是說,任何一頭奶牛的...