luoguP2709 小B的詢問

2022-08-23 04:48:12 字數 1080 閱讀 5590

題目描述

小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

using

namespace

std;

int n,m,k;

int p[50020];

struct node;

node ask[50020];

int ans[50020],a[50010];

int unit;

int cmp(const node &a,const node &b)

while (r>ask[i].y)

while (l2+1);

l++;

}while (l>ask[i].x)

ans[ask[i].id]=tmp;

}

}int main()

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

doit();

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

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

return

0;}

luogu P2709 小B的詢問

原題位置 這道題是莫隊,據說在離線區間查詢上,莫隊無敵,但是感覺還好吧 首先這道題是乙個用來練手的好題,因為這是板子題 所以主要就是排序,然後while查詢 至於排序方式 首先 應用分塊思想,以查詢左端點所在塊為第一關鍵字,以右端點為第二關鍵字 均從小到大排序 然後就沒有然後了 分割線啊 inclu...

luogu 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個整數,表示小b的序列。接下來的m行,...

luogu P2709 小B的詢問

但本題特殊的地方就是那個sigma。考慮對於i這個數,它現在又出現了一次,計算對答案的影響 c i 1 c i 2c i 1 所以每次出現次數加一時就給答案加上2 c i 1。類似的,減少一次時就減去2 c i 1。include include include include include de...