luogu 2709小b的詢問 莫隊

2022-04-28 18:15:17 字數 725 閱讀 3917

無修改的莫隊幾乎沒有什麼太高深的套路,比較模板吧,大多都是在那兩個函式上動手腳。

這題詢問每一種數字數量的平方和,那麼我們在左移或右移的時候記錄一下就好了,當每一種數字的種類數加1或減1的時候,我們需要減去以前這個數對答案的影響,加上現在對答案的影響。

假設原來數字a的種類數為k,如今又加入乙個a,那麼先ans-=k^2,然後ans+=(k+1)^2.,刪除同理。

#include #include 

#include

#include

#include

#define n int(5e5+2)

#define m int(2e5+2)

using

namespace

std;

struct

ahahask[n];

intanswer,n,m,q,a[n],cnt[n],ans[n],k;

bool cmp(ahah a,ahah b)

bool comp(ahah a,ahah b)

void remove(int

pos)

void add(int

pos)

intmain()

for(int i=1;i<=q;i++)printf("

%d\n

",ans[i]-1); //

here很神,發現不改比樣例都大1

}

洛谷2709 小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行,每行兩個整...

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的詢問 莫隊

題面只要能想出 o 1 的方式轉移 l,r 莫隊就不難了。此題求區間 sum kcnt i 2 那我們就 o 1 更新就好了,先減去原來的貢獻,更新cnt再加上現在的貢獻,這樣就更新完了。注意 莫隊小心初始化,直接l 0,r 0等可能會炸。include include include define...