洛谷P2709 小B的詢問

2021-07-31 06:50:38 字數 1199 閱讀 9743

題目描述

小b有乙個序列,包含n個1~k之間的整數。他一共有m個詢問,每個詢問給定乙個區間[l..r],求sigma(c(i)^2)的值,其中i的值從1到k,其中c(i)表示數字i在[l..r]中的重複次數。小b請你幫助他回答詢問。

輸入輸出格式

輸入格式:

第一行,三個整數n、m、k。

第二行,n個整數,表示小b的序列。

接下來的m行,每行兩個整數l、r。

輸出格式:

m行,每行乙個整數,其中第i行的整數表示第i個詢問的答案。

輸入輸出樣例

輸入樣例#1:

6 4 3

1 3 2 1 1 3

1 4

2 6

3 5

5 6

輸出樣例#1:

6 9

5 2

說明對於全部的資料,1<=n、m、k<=50000

題解 直接上莫隊

**

#include

#include

#include

#include

#include

#define ll long long

struct dataa[50005];

int n,m,k;

int b[50005],sum[50005];

ll res[50005];

using namespace std;

inline int

read()

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

return

x*f;

}bool cmp(data a,data b)

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

sort(a+1,a+m+1,cmp);

int l=1,r=0;ll ans=0;

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

while (l2

*sum[b[l]]+1;l++;}

while (r2

*sum[b[r]]-1;}

while (r>a[i].r)

res[a[i].id]=ans;

}for (int i=1;i<=m;i++)

printf("%d\n",res[i]);

return

0;}

洛谷P2709 小B的詢問

傳送門 題目描述 小b有乙個序列,包含n個1 k之間的整數。他一共有m個詢問,每個詢問給定乙個區間 l.r 求sigma c i 2 的值,其中i的值從1到k,其中c i 表示數字i在 l.r 中的重複次數。小b請你幫助他回答詢問。輸入輸出格式 輸入格式 第一行,三個整數n m k。第二行,n個整數...

洛谷 P2709 小B的詢問

莫隊演算法,弄兩個指標亂搞即可 這應該是基礎莫隊了吧 x 2 可以拆成 x 1 1 2 也就是 x 1 2 1 2 2 times x 1 那麼如果乙個數字出現的次數修改 1 那麼 ans 1 2 times sum a pos 1 sum a pos 表示出現在 pos 位置上的數出現的次數。反之...

洛谷P2709 小B的詢問

題目大意 有乙個序列 s i 最大的數為 k 有 m 個詢問,詢問 l,r 中 sum c i 2 c i 表示數字 i 在 l,r 中的出現次數 題解 莫隊 卡點 為什麼我奇偶性優化會鍋?後記 發現了,用異或時,若 a.l b.l a.r b.r 時可能會出現 ac code include in...