zoukankan      html  css  js  c++  java
  • 2019.9.4 校门外的树

    那个校门外的树?你想多了

    题目传送门

    对于这样定值的区间修改 我们有一种叫做括号序列的方法

    我们修改区间时 将其左端点l标记为左括号 右端点右括号

    所以我们每次查询时 首先查找右端点左侧有多少个左括号

    (即有多少区间起点)

    再查找左端点左侧有多少个右括号(已经匹配了多少区间)

    二者相减即可

    为了维护两个前缀和 我们用两个树状数组

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #define int long long
    using namespace std;
    int n,m,k,x,y;
    int l[1000050],r[1000050];
    int lowbit(int x)
    {
        return x&(-x);
    }
    void addl(int i,int x)
    {
        while(i<=n)
        {
            l[i]+=x;
            i+=lowbit(i);
        }
    }
    void addr(int i,int x)
    {
        while(i<=n)
        {
            r[i]+=x;
            i+=lowbit(i);
        }
    }
    int queryl(int i)
    {
        int res=0;
        while(i>=1)
        {
            res+=l[i];
            i-=lowbit(i);
        }
        return res;
    }
    int queryr(int i)
    {
        int res=0;
        while(i>=1)
        {
            res+=r[i];
            i-=lowbit(i);
        }
        return res;
    }
    signed main()
    {
        scanf("%lld%lld",&n,&m);
        for(int i=1;i<=m;i++)
        {
            scanf("%lld%lld%lld",&k,&x,&y);
            if(k==1)
            {
                addl(x,1);
                addr(y,1);
            }
            if(k==2)printf("%lld
    ",queryl(y)-queryr(x-1));
        }
        return 0;
    }
    /*====年轻人,瞎搞是出不了省一的,这就是现实====*/
  • 相关阅读:
    IOS:APP网络状态的检测
    IOS:个人笔记|UI__使用Plist文件来进行数据的读取
    IntelliJ IDEA中项目import与open的区别
    打开电脑分屏
    微服务
    自增主键和UUID
    雪花算法
    使用navicat连接阿里云上mysql
    【vue】报错This dependency was not found
    跨域问题
  • 原文地址:https://www.cnblogs.com/qxds/p/11460765.html
Copyright © 2011-2022 走看看