分塊 公主的朋友

2021-08-06 00:20:49 字數 1614 閱讀 2288

時間限制: 1 sec  記憶體限制: 256 mb

由於 wulala 在上個問題中的精彩表現,公主認為 wulala 是乙個很棒的人,就把 wulala 留在了 x 國。這時正好公主的一位傳教士朋友來拜訪公主,於是想找 wulala 幫忙x 國如同一條直線,其中有 n 個城市,從東向西分別編號為 1~n。而他的國家中有 m 種宗教,每個城市一定會有一種信仰的宗教。

有時候有些城市為了獲得更多的認可,會派出信仰本城市宗教的傳教士前往其他國家。x 國

的傳教士都十分厲害,只要是他途經的地方都會改信他所傳播的宗教。

傳教士們在路上碰到自己宗教的城市自然就不用傳教了,可以停下來看看裡番啥的,所以每

乙個傳教士在旅行前都會計算自己可以在多少城市停下來(不包括起始的城市)。

而傳教士們都是文科僧,數學是很差的,所以他希望 wulala 能幫他計算。可 wulala 數學也不好,但他又不想在公主面前丟臉,你能幫幫他嗎?

第一行兩個整數 n,m

第二行 n 個整數第 i 個整數代表第 i 各城市信仰的宗教

第三行乙個整數 t 代表傳教士的個數

接下來 t 行每行兩個整數 x,y 代表 x 城向 y 城派遣了乙個傳教士(保證 x < y)

輸出 t 行,第 i 行代表第 i 個傳教士詢問的答案

2 21 221 21 2
01
對於 30%的資料 n <= 100000, m <= 10, t <= 100

對於 60%的資料 n <= 100000, m <= 10, t <= 100000

對於 100%的資料 n <= 100000, m <= 300, t <= 100000

可以用線段樹,但分塊很好想啊。。聯考時又ac了一道。。

比普通分塊,我腦補出了一種分塊延遲標記。指這個塊如果被某個zz傳教士橫跨了過去,就是說這個塊全變成了某乙個宗教,打上個標記,記錄這個塊變成了某個宗教。如果這個塊又被整個遍歷,就不用把延遲下傳。而如果這個塊被當做散點遍歷了,就要把標記下傳,更新。

#include#include#include#include#include#include#define n 100000

using namespace std;

int read()

while(x>='0'&&x<='9')

return sum*f;

}int n,m,a[n+5],kuai[n+5],h,t,v[n+5],s[2000][305];

int get(int l,int r)

else sum++;

return sum;}}

else

else sum++;

}if(v[kuai[r]]==f)

sum+=r-(kuai[r]-1)*h;

else

else sum++;

}for(int i=kuai[l]+1;i70)h=70;

for(int i=1;i<=n;i++)

t=read();

int l,r,sum=0;

for(int i=1;i<=t;i++)

sum=get(l+1,r);

printf("%d\n",sum);

}

卿學姐與公主 分塊

某日,百無聊賴的卿學姐開啟了某11區的某魔幻遊戲 在這個魔幻的遊戲裡,生活著乙個美麗的公主,但現在公主被關押在了魔王的城堡中。英勇的卿學姐拔出利刃衝向了拯救公主的道路。走過了荒野,翻越了高山,跨過了大洋,卿學姐來到了魔王的第一道城關。在這個城關面前的是魔王的精銳部隊,這些士兵成一字排開。卿學姐的 每...

CDOJ 1324 卿學姐與公主 分塊法

某日,百無聊賴的卿學姐開啟了某11區的某魔幻遊戲 在這個魔幻的遊戲裡,生活著乙個美麗的公主,但現在公主被關押在了魔王的城堡中。英勇的卿學姐拔出利刃衝向了拯救公主的道路。走過了荒野,翻越了高山,跨過了大洋,卿學姐來到了魔王的第一道城關。在這個城關面前的是魔王的精銳部隊,這些士兵成一字排開。卿學姐的 每...

公主的眼淚

在很久很久以前,有乙個國王。他把他的國家治理的非常好,國家不大,但百姓們豐衣足食,安居樂業,十分幸福。國王有三位美麗可愛的小公主,三位小公主們從生下來就具有一種神奇的魔力,當她們哭泣的時候,落下的眼淚會化作一顆顆晶瑩剔透的鑽石,價值連城。有一天,國王發覺自己年事已高,自己的國家還沒有人可以託付,公主...