HDU 3874 Necklace 數狀陣列

2021-09-06 10:12:35 字數 2018 閱讀 9603

題意:求[l, r]區間內不重複的數的和。n個數,m次詢問

解:離線處理m次詢問,看得別人的思路後才知道的。。。思維侷限在預處理n個數上了。。。

對m次詢問按右區間的值從小到大排序。掃一遍n個數,如果發現當前這個數在之前出現過,就從之前出現這個數的位置上把這個數刪除,在新位置上插入這個數。這樣做的好處是刪除前面重複的不會影響後面的。時間複雜度控制在(n + m)logn的數量級上。

ps:午不眠,睏乎,我命休矣。

#include #include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define cl(arr, val) memset(arr, val, sizeof(arr))

#define rep(i, n) for((i) = 0; (i) < (n); ++(i))

#define for(i, l, h) for((i) = (l); (i) <= (h); ++(i))

#define ford(i, h, l) for((i) = (h); (i) >= (l); --(i))

#define l(x) (x) << 1

#define r(x) (x) << 1 | 1

#define mid(l, r) (l + r) >> 1

#define min(x, y) (x) < (y) ? (x) : (y)

#define max(x, y) (x) < (y) ? (y) : (x)

#define e(x) (1 << (x))

#define iabs(x) (x) < 0 ? -(x) : (x)

#define out(x) printf("%i64d\n", x)

#define read() freopen("data.in", "r", stdin)

#define write() freopen("data.out", "w", stdout);typedef __int64 ll;

const

double eps = 1e-6

;const

double pi = acos(-1.0

);const

int inf = 0x1f1f1f1f

;using

namespace

std;

const

int n = 50010

;const

int m = 200010

;struct

node

}p[m];

ll c[n];

ll ans[m];

intnum[n];

mapmp;

int lowbit(int

i) void add(int p, int

val)

}ll sum(

intp)

return

res;

}int

main()

sort(p, p +m);

memset(c,

0, sizeof

(c));

mp.clear();

r = 1

;

for(i = 0; i < m; ++i)

add(r, t);

mp[t] = r++;

}ans[p[i].id] = sum(p[i].r) - sum(p[i].l - 1

); }

for(i = 0; i < m; ++i)

}return0;

}

view code

Hdu 3874 Necklace 樹狀陣列

題意 詢問某一區間的值之和,相同元素只算一次 思路,樹狀陣列求解,由於區間相同元素只算一次,採用離線演算法,把區間右端點從小到大排序,按順序處理。首先我們找到乙個點時,記錄它的下標,若在後面還有與它相同的元素,我們把之前的元素去掉,插入到當前位置,每次進行這樣的一次處理,就要判斷一下,處理後該點有沒...

HDU 3874 Necklace 樹狀陣列

題意 求區間內不同的數的和 離線處理,按查詢右端點從小到大排序,從左往右掃一遍。記錄每個數出現的上乙個位置,如果該數之前沒有出現過,就加上,否則就在上乙個位置減去。include include include include define ll long long int using namesp...

HDU 3874 Necklace 莫隊演算法

題目 題意 給定乙個陣列,每次詢問乙個區間 l,r 求區間內所有數字的和,出現多次的數字只加一次 思路 莫隊演算法掃一遍即可,注意會爆int。我陣列開小了不少re而是tle,蛋疼。include include include include include include using namesp...