作為乙個生活散漫的人,小z每天早上都要耗費很久從一堆五顏六色的襪子中找出一雙來穿。終於有一天,小z再也無法忍受這惱人的找襪子過程,於是他決定聽天由命……
具體來說,小z把這n只襪子從1到n編號,然後從編號l到r(l 儘管小z並不在意兩隻襪子是不是完整的一雙,甚至不在意兩隻襪子是否一左一右,他卻很在意襪子的顏色,畢竟穿兩隻不同色的襪子會很尷尬。
你的任務便是告訴小z,他有多大的概率抽到兩隻顏色相同的襪子。當然,小z希望這個概率盡量高,所以他可能會詢問多個(l,r)以方便自己選擇。
input
輸入檔案第一行包含兩個正整數n和m。n為襪子的數量,m為小z所提的詢問的數量。接下來一行包含n個正整數ci,其中ci表示第i只襪子的顏色,相同的顏色用相同的數字表示。再接下來m行,每行兩個正整數l,r表示乙個詢問。
output
包含m行,對於每個詢問在一行中輸出分數a/b表示從該詢問的區間[l,r]中隨機抽出兩隻襪子顏色相同的概率。若該概率為0則輸出0/1,否則輸出的a/b必須為最簡分數。(詳見樣例)
sample input
6 41 2 3 3 3 2
2 61 3
3 51 6
sample output
2/50/1
1/14/15
【樣例解釋】詢問1:共c(5,2)=10種可能,其中抽出兩個2有1種可能,抽出兩個3有3種可能,概率為(1+3)/10=4/10=2/5。
詢問2:共c(3,2)=3種可能,無法抽到顏色相同的襪子,概率為0/3=0/1。詢問3:共c(3,2)=3種可能,均為抽出兩個3,
概率為3/3=1/1。注:上述c(a, b)表示組合數,組合數c(a, b)等價於在a個不同的物品中選取b個的選取方案數。
【資料規模和約定】30%的資料中 n,m ≤ 5000;60%的資料中 n,m ≤ 25000;100%的資料中 n,m ≤ 50000,
1 ≤ l < r ≤ n,ci ≤ n。
莫隊模板題
#include using namespace std;
typedef long long ll;
const int maxn=50050;
int a[maxn],t;
ll ansa[maxn],ansb[maxn],c[maxn];
struct nodes[maxn];
bool cmp(const node &a,const node &b)
while(l>s[i].l)
while(r1)
ans-=c[a[r]]*(c[a[r]]-1);
c[a[r]]++;
if(c[a[r]]>1)
ans+=c[a[r]]*(c[a[r]]-1);
}while(r>s[i].r)
ansa[s[i].id]=ans;
ansb[s[i].id]=(ll)(r-l+1)*(r-l);
}for(int i=1;i<=m;i++)
}return 0;
}
HYSBZ 2038經典莫隊演算法題
無修改的莫隊 emmm莫隊的幾條性質,必須是離線的,複雜度是n sqrt n 就是通過預處理查詢區間,然後從 l,r 轉移到 ll,rr 這樣的複雜度是曼哈頓距離,即abs l ll abs r rr 通過分塊可以保證複雜度在n sqrt n 內 詳細請參考 include define fi fi...
BZOJ 2038 小Z的襪子(莫隊演算法)
莫隊演算法的話,看這個比較好懂 net bossup article details 39236275 不過這裡面的部落格的 貌似有點問題,所以 的話,net lwt36 article details 50583757 這個是對的,看我的也行。什麼時候用莫隊?1 區間不會被修改 2 可以離線 3 ...
BZOJ2038,小Z的襪子(莫隊演算法)
莫隊演算法。這道題wa了很多次,猜測可能是跟oj系統有關,有點坑。如下 include include include includeusing namespace std typedef long long ll const int maxn 5e4 5 const int mm 2e6 5 in...