HDU 3333 分塊求區間不同數和

2022-08-19 20:33:08 字數 621 閱讀 4290

題意:求區間不同數的和。

思路:主席樹和樹狀陣列的的做法就不介紹了,blog裡有介紹過。。這裡介紹一下分塊的做法(本來是想去莽5919。。。結果沒莽過。。。只能改改**拿3333來練練手了)

這裡維護每個塊的值(最之前出現的位置)有序,之後就是分塊套路,查詢整塊的時候去二分有序陣列,就可以知道哪些是沒有計算過的了。(顯然小於l才是第一次出現)。。於是乎排序每個塊之外再加乙個每塊的字首和就好了。不多說看**。。分塊風格學的卿學姐的。感覺比以前自己寫的清爽不少,畢竟記憶體不要錢嘛(誤),總之很清爽233333

**:#includeusing namespace std;

const int maxn = 30010;

int n,q,block,num,a[maxn],belong[maxn],l[maxn],r[maxn];

pairc[maxn],d[maxn];

long long sum[maxn],q[maxn*5];

mapmp;

int in()

int build(int n){

block=sqrt(n);

num=n/block;

if(n%block!=0) num++;

for(int i=0;i

hdu3333 線段樹求不同數字之和

普通的陣列,普通的給區間求和,然而這道題要不同的數字,也就是如果有重複數字不能加入到和中 不能有重複數字那麼給線段樹中加乙個數字,如果有重複的那之前的就要刪掉 那麼查區間的時候怎麼辦呢 在新的數字v n 有效前把前n個數字和 需要查詢的 先算出來 所以先給區間們排序,每次查之前構造範圍內的線段樹 m...

HDU1754 分塊入門1

題意 單點更新,區間求最值 思路 維護每個值 and 分塊,維護每塊的最值 如果 x 和 y 隸屬於同一塊,那麼直接列舉就行 如果它們不在同一塊,那麼中間的每一塊的最大值可以由數列 p 得到,其他x,y各自所在塊包含的元素直接列舉即可 列舉塊數複雜度 sqrt n 列舉塊內元素複雜度 sqrt n ...

HDU 4389 (分塊打表)

題意 f x 表示x的各數字的和,給出 l,r 問區間中有多少個數x,存在x mod f x 0 思路 l,r範圍在1e9,估算複雜度後發現應該可以遞推打出乙個表,按1000000每塊,分塊後將塊內答案儲存在陣列中,塊間累加,塊內暴力,查詢即可。好像正解是數字dp include include i...