bzoj 4769 超級貞魚 歸併排序

2022-08-20 23:33:12 字數 2308 閱讀 8343

time limit: 1 sec  memory limit: 128 mb

馬達加斯加貞魚是一種神奇的雙腳貞魚,它們把自己的智慧型寫在腳上——每只貞魚的左腳和右腳上個有乙個數。有一天,k只貞魚興致來潮(1≤k≤10^5),排成一列,從左到右第i只貞魚會在右腳寫ai(1≤ai≤10^9),左腳上寫上i(1≤i≤k),第二年,這k只貞魚按右腳的數從小到大排成一列,然後,它們決定重編號,從左到右第i只貞魚會在右腳上寫上左腳的數,在左腳上寫i,第三年,它們按第二年的方法重排列、重編號......n年後(1≤n≤10^5),對於從左到右第i和第j貞魚,若i一共3行,第一行乙個正整數k(1≤k≤10^5),第二行k個數從左到右輸入ai(1≤ai≤10^9),第三行乙個正整數n(1≤n≤10^5)。

乙個整數,表示「超級貞魚」對數。

6

5 2 6 3 1 7

0

7
對於全部資料:ai≤10^9。

30%的資料:n,k<=400; 

70%的資料:n,k<=10000; 

100%的資料:n,k<=100000;

命題by benny

roj原創

upd: 好吧,經過出題人的不懈努力,我的程式終於tle了。。qwq

那麼優化一下,聽唐大爺說不論怎麼變換,逆序對的數總是不變的(似乎好有道理qaq),那麼離散化什麼的都不需要辣,只要一次歸併排序就好

#include#include

#include

#include

#include

#include

#include

using

namespace

std;

#define ll long long

#define n 2000100 inline

intread()

while(ch>='

0'&&ch<='9')

return x*f;

}int

a[n],tmp[n],k;

ll n,ji;

void gb(int l,int

r) tmp[cnt++]=a[h1];

h1++;

}for(int i=h1;i<=mid;i++) tmp[cnt++]=a[i];

for(int i=h2;i<=r;i++) tmp[cnt++]=a[i];

for(int i=l;i<=r;i++) a[i]=tmp[i];

}int

main()

歸併排序裸題,我們會發現當重排次數 n 為偶數時,其等價於原數列,(其實就是相當於乙個二元的結構體,一次按第一位排序,第二次按第二位排序),然後就是相當於求乙個數列的逆序對個數

初始的時候先離散化一下就好(tle)

#include#include

#include

#include

#include

#include

#include

using

namespace

std;

#define ll long long

#define n 1000100 inline

intread()

while(ch>='

0'&&ch<='9')

return x*f;

}int

n,a[n],tmp[n],k;

ll ji;

void gb(int l,int

r) tmp[cnt++]=a[h1];

h1++;

}for(int i=h1;i<=mid;i++) tmp[cnt++]=a[i];

for(int i=h2;i<=r;i++) tmp[cnt++]=a[i];

for(int i=l;i<=r;i++) a[i]=tmp[i];

}struct qaztp[n];

bool cmp(qaz q,qaz z)

intmain()

sort(tp+1,tp+n+1

,cmp);

for(int i=1;i<=n;i++) a[tp[i].p]=i;

k=read();

if(k&1

)

sort(tp+1,tp+n+1

,cmp);

for(int i=1;i<=n;i++) a[i]=tp[i].p;

}gb(

1,n);

printf(

"%lld\n

",ji);

}

bzoj4769超級貞魚 歸併排序

description 馬達加斯加貞魚是一種神奇的雙腳貞魚,它們把自己的智慧型寫在腳上 每只貞魚的左腳和右腳上個有乙個數。有一天,k只貞魚興致來潮 1 k 10 5 排成一列,從左到右第i只貞魚會在右腳寫ai 1 ai 10 9 左腳上寫上i 1 i k 第二年,這k只貞魚按右腳的數從小到大排成一列...

BZOJ 4769 超級貞魚 歸併排序

time limit 2 sec memory limit 64 mb submit 123 solved 32 submit status discuss 馬達加斯加貞魚是一種神奇的雙腳貞魚,它們把自己的智慧型寫在腳上 每只貞魚的左腳和右腳上個有乙個數。有一天,k只貞魚興致來潮,排成一列,從左到右...

超級鋼琴 BZOJ 2006

超級鋼琴 問題描述 小z是乙個小有名氣的鋼琴家,最近c博士送給了小z一架超級鋼琴,小z希望能夠用這架鋼琴創作出世界上最美妙的 這架超級鋼琴可以彈奏出n個音符,編號為1至n。第i個音符的美妙度為ai,其中ai可正可負。乙個 超級 和弦 由若干個編號連續的音符組成,包含的音符個數不少於l且不多於r。我們...