[TYVJ1473]校门外的树3

Posted skylee的OI博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[TYVJ1473]校门外的树3相关的知识,希望对你有一定的参考价值。

思路:

维护两个树状数组,一个记录种树区间左端点,一个记录右端点。
每次询问查询“看不见的树区间”,即右端点小于查询区间左端点和左端点小于查询区间右端点。

 1 #include<cstdio>
 2 #include<cctype>
 3 #include<cstring>
 4 inline int getint() {
 5     char ch;
 6     while(!isdigit(ch=getchar()));
 7     int x=ch^0;
 8     while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^0);
 9     return x;
10 }
11 const int N=50001;
12 int n;
13 class FenwickTree {
14     private:
15         int val[N];
16         int lowbit(const int x) {
17             return x&-x;
18         }
19     public:
20         FenwickTree() {
21             memset(val,0,sizeof val);
22         }
23         void modify(int p) {
24             while(p<=n) {
25                 val[p]++;
26                 p+=lowbit(p);
27             }
28         }
29         int query(int p) {
30             int ans=0;
31             while(p) {
32                 ans+=val[p];
33                 p-=lowbit(p);
34             }
35             return ans;
36         }
37 };
38 FenwickTree t[2];
39 int main() {
40     n=getint();
41     for(int m=getint(),cnt=0;m;m--) {
42         int op=getint(),l=getint(),r=getint();
43         if(op==1) {
44             t[0].modify(n+1-l);
45             t[1].modify(r);
46             cnt++;
47         }
48         if(op==2) {
49             printf("%d\n",cnt-t[0].query(n-r)-t[1].query(l-1));
50         }
51     }
52     return 0;
53 }

 

以上是关于[TYVJ1473]校门外的树3的主要内容,如果未能解决你的问题,请参考以下文章

Luogu P1276 校门外的树(增强版)

洛谷 1276 校门外的树(增强版)

洛谷P1047校门外的树题解

校门外的树

P1047 校门外的树

Vijos1448校门外的树 题解