時間限制: 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區的某魔幻遊戲 在這個魔幻的遊戲裡,生活著乙個美麗的公主,但現在公主被關押在了魔王的城堡中。英勇的卿學姐拔出利刃衝向了拯救公主的道路。走過了荒野,翻越了高山,跨過了大洋,卿學姐來到了魔王的第一道城關。在這個城關面前的是魔王的精銳部隊,這些士兵成一字排開。卿學姐的 每...
公主的眼淚
在很久很久以前,有乙個國王。他把他的國家治理的非常好,國家不大,但百姓們豐衣足食,安居樂業,十分幸福。國王有三位美麗可愛的小公主,三位小公主們從生下來就具有一種神奇的魔力,當她們哭泣的時候,落下的眼淚會化作一顆顆晶瑩剔透的鑽石,價值連城。有一天,國王發覺自己年事已高,自己的國家還沒有人可以託付,公主...