线段树/树状数组问题 | 问题集合
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线段树/树状数组问题 | 问题集合相关的知识,希望对你有一定的参考价值。
写在前面
线段树代码实在冗长,于是乎能用树状数组直接搞的就懒得打线段树了(:溜
1.P2620[QZYZ] 校门外的树
描述 Description
输入格式 InputFormat
输出格式 OutputFormat
样例输入 SampleInput
5 4
1 1 32 2 51 2 42 3 5
样例输出 SampleOutput
1
2
1 #include <iostream>
2 #include <cstdio>
3 #include <algorithm>
4 #include <cstring>
5 #define lowbit(x) x&(-x)
6
7 using namespace std;
8
9 int l[1001] , r[1001] , n , m;
10
11 int read()
12 {
13 int x = 0;
14 char c = getchar();
15 while(c < ‘0‘ || c > ‘9‘) c = getchar();
16 while(c >= ‘0‘ && c <= ‘9‘) x = x*10 + c-‘0‘ , c = getchar();
17 return x;
18 }
19
20 void add(int arr[],int x)
21 {
22 while (x<=n)
23 {
24 arr[x]++;
25 x+=lowbit(x);
26 }
27 return;
28 }
29
30 int query(int arr[],int x)
31 {
32 int ans=0;
33 while (x>0)
34 {
35 ans+=arr[x];
36 x-=lowbit(x);
37 }
38 return ans;
39 }
40
41 int main()
42 {
43 cin >> n >> m;
44 while(m--){
45 int x , y , z;
46 z = read(),x = read(),y = read();
47 if (z == 1)
48 add(l , x),add(r , y);
49 else cout << query(l , y) - query(r , x-1) << endl;
50 }
51 return 0;
52 }
以上是关于线段树/树状数组问题 | 问题集合的主要内容,如果未能解决你的问题,请参考以下文章