bzoj1878 樹狀陣列 要一點思考

2022-03-30 13:24:14 字數 2945 閱讀 5831

一開始快排敲錯兩次

1

program

hehe;

2var

3t,n,m,i,j,k:longint;

4 c:array[0..1000000] of

longint;

5 pre,next,a,x:array[0..50005] of

longint;

6 ans,p,z,y:array[0..200005] of

longint;78

procedure

sort(l,r:longint);

9var

10zuo,you,mid:longint;

11begin

12 zuo:=l;

13 you:=r;

14 mid:=y[(l+r)>>1

];15

repeat

16while y[zuo]do

inc(zuo);

17while y[you]>mid do

dec(you);

18if zuo<=you then

19begin

20 t:=z[zuo];

21 z[zuo]:=z[you];

22 z[you]:=t;

23 t:=y[zuo];

24 y[zuo]:=y[you];

25 y[you]:=t;

26 t:=p[zuo];

27 p[zuo]:=p[you];

28 p[you]:=t;

29dec(you);

30inc(zuo);

31end;32

until zuo>you;

33if lthen

sort(l,you);

34if zuothen

sort(zuo,r);

35end;36

37function

lowbit(a:longint):longint;

38begin

39 exit(a and(-a));

40end;41

42procedure

add(a,b:longint);

43begin

44while a<=n do

45begin

46 x[a]:=x[a]+b;

47 a:=a+lowbit(a);

48end;49

end;

5051

function

find(a:longint):longint;

52var

53s:longint;

54begin

55 s:=0;56

while a>0

do57

begin

58 s:=s+x[a];

59 a:=a-lowbit(a);

60end;61

exit(s);

62end;63

64begin

65readln(n);

66 fillchar(a,sizeof(a),255

);67

for i:=1

to n do

68begin

69read(a[i]);

70 pre[i]:=c[a[i]];

71 c[a[i]]:=i;

72 next[pre[i]]:=i;

73end;74

read(m);

75for i:=1

to m do

read(z[i],y[i]);

76for i:=1

to m do p[i]:=i;

77 sort(1

,m);

78for i:=1

to m do

79begin

80while jdo

81begin

82inc(j);

83 add(pre[j]+1,1

);84 add(j+1,-1)85

end;

86 ans[p[i]]:=find(z[i]);

87end;88

for i:=1

to m do

89writeln(ans[i]);

90end.

view code

time limit: 4 sec  memory limit: 64 mb

submit: 2154  solved: 1062

[submit][status][discuss]

hh有一串由各種漂亮的貝殼組成的項鍊。hh相信不同的貝殼會帶來好運,所以每次散步 完後,他都會隨意取出一段貝殼,思考它們所表達的含義。hh不斷地收集新的貝殼,因此, 他的項鍊變得越來越長。有一天,他突然提出了乙個問題:某一段貝殼中,包含了多少種不同 的貝殼?這個問題很難回答。。。因為項鍊實在是太長了。於是,他只好求助睿智的你,來解 決這個問題。

第一行:乙個整數n,表示項鍊的長度。 第二行:n個整數,表示依次表示項鍊中貝殼的編號(編號為0到1000000之間的整數)。 第三行:乙個整數m,表示hh詢問的個數。 接下來m行:每行兩個整數,l和r(1 ≤ l ≤ r ≤ n),表示詢問的區間。

m行,每行乙個整數,依次表示詢問對應的答案。

61 2 3 4 3 5

31 2

3 52 622

4對於20%的資料,n ≤ 100,m ≤ 1000;

對於40%的資料,n ≤ 3000,m ≤ 200000;

對於100%的資料,n ≤ 50000,m ≤ 200000。

day2

[submit][status][discuss]

樹狀陣列 BZOJ1878 HH的項鍊

hh有一串由各種漂亮的貝殼組成的項鍊。hh相信不同的貝殼會帶來好運,所以每次散步 完後,他都會隨意取出一段貝殼,思考它們所表達的含義。hh不斷地收集新的貝殼,因此,他的項鍊變得越來越長。有一天,他突然提出了乙個問題 某一段貝殼中,包含了多少種不同 的貝殼?這個問題很難回答。因為項鍊實在是太長了。於是...

樹狀陣列 BZOJ1878 HH的項鍊

hh有一串由各種漂亮的貝殼組成的項鍊。hh相信不同的貝殼會帶來好運,所以每次散步 完後,他都會隨意取出一段貝殼,思考它們所表達的含義。hh不斷地收集新的貝殼,因此,他的項鍊變得越來越長。有一天,他突然提出了乙個問題 某一段貝殼中,包含了多少種不同 的貝殼?這個問題很難回答。因為項鍊實在是太長了。於是...

樹狀陣列一點心得

樹狀陣列的基本概念不說了,網上大佬們的講解部落格很多。先上一段我的模板 inline int lowbit int x inline void update int x,int val for int i x i舉兩個例子來加深一下對樹狀陣列的理解。可以知道維護的 tree 陣列 表示到第 i 項的...