首页 > 其他分享 >洛谷 P3368 【模板】树状数组 2

洛谷 P3368 【模板】树状数组 2

时间:2024-03-26 13:23:06浏览次数:26  
标签:sz FenwickTree ft 树状 int lowbit long P3368 洛谷

class FenwickTree{
public:
    FenwickTree(int sz): sz_(sz){
        ft_.resize(sz_);
    }

    FenwickTree(vector<long long>& f){
        sz_ = int(f.size());
        ft_.assign(sz_, 0);
        for (int i = 1; i < sz_; ++i){
            ft_[i] += f[i];
            if (i + lowbit(i) < sz_){
                ft_[i + lowbit(i)] += ft_[i];
            }
        }
    }

    FenwickTree(vector<int>& s){
        sz_ = *max_element(s.begin() + 1, s.end()) + 1;
        ft_.resize(sz_);
        for (size_t i = 1; i < s.size(); ++i){
            ft_[s[i]] ++;
            if (s[i] + lowbit(s[i]) < sz_){
                ft_[s[i] + lowbit(s[i])] += ft_[s[i]];
            }
        }
    }

    void update(int pos, long long value){
        while (pos < sz_){
            ft_[pos] += value;
            pos += lowbit(pos);
        }
    }

    void update(int l, int r, long long value){
        update(l, value);
        update(r + 1, -value);
    }

    long long query(int p){
        assert(p < sz_);
        long long res = 0;
        while (p > 0){
            res += ft_[p];
            p -= lowbit(p);
        }
        return res;
    }

    long long query(int l, int r){
        assert(l <= r);
        return query(r) - query(l - 1);
    }


private:
    int sz_;
    vector<long long> ft_;


private:
    inline int lowbit(int x) {return (x & (-x));}
};






void solve(){
    int n, m;
    cin >> n >> m;

    vector<long long> a(n + 1);
    for (int i = 1; i <= n; ++i){
        cin >> a[i];
    }

    for (int i = n; i >= 1; --i){
        a[i] -= a[i - 1];
    }

    FenwickTree ft(a);
    while (m --){
        int t, x, y;
        cin >> t;
        if (t & 1){
            long long k;
            cin >> x >> y >> k;
            ft.update(x, y, k);
        }
        else{
            cin >> x;
            cout << ft.query(1, x) << '\n';
        }
    }
}

标签:sz,FenwickTree,ft,树状,int,lowbit,long,P3368,洛谷
From: https://www.cnblogs.com/yxcblogs/p/18096461

相关文章

  • 洛谷题单指南-集合-P1892 [BOI2003] 团伙
    原题链接:https://www.luogu.com.cn/problem/P1892题意解读:此题与关押罪犯问题非常像,本质上就是要合并所有的朋友。解题思路:首先,初始化并查集;对于每一对人的关系,如果是朋友,直接进行合并;如果是敌人,先查看双方之前是否有记录其他敌人,如果有,则将一方与另一方的敌人进行合并,如果没......
  • 洛谷题单指南-集合-P1621 集合
    原题链接:https://www.luogu.com.cn/problem/P1621题意解读:a~b之间的数,把有大于等于p的公共质因数的数进行合并作为一个集合,求一共有多少个集合。解题思路:要进行集合合并、统计集合数,可以使用并查集,有两种做法:1、暴力法80%的数据在1000范围内,因此通过双重循环枚举,判断两个数的......
  • 洛谷 P1656 炸铁路
    题意:n个点,m条边,问有哪条边是去掉之后,会造成之前连通的点不再连通的?n<=150,m<=5000.思路:连通算法有dfs+bool数组记录,或者dsu,感觉dsu更方便。m*n不超过1e6,直接暴力。classDisjointSet{public:DisjointSet(intsz):sz_(sz){set_size_.assign(sz_,1);......
  • python 递归树状结构 和 排序
    排序defrecursive_sort(self,categories):categories.sort(key=lambdax:x['sort'])forcategoryincategories:ifcategory['children']:category['children']=self.recursive_sort(ca......
  • 拓扑排序 洛谷B3644家谱树解法
    #include<bits/stdc++.h>usingnamespacestd;intd[101];//d[i]表示i点的入度个数intt[101][101];//t[i][j]表示i点到j点间有一条有向边queue<int>q;//q表示当前入度为0的节点intmain(){ //所有数组初始化为0 memset(d,0,sizeof(d)); memset(t,0,sizeof(t......
  • 洛谷之P1563 [NOIP2016 提高组] 玩具谜题
    题目 [NOIP2016提高组]玩具谜题题目背景NOIP2016提高组D1T1 题目描述小南有一套可爱的玩具小人,它们各有不同的职业。有一天,这些玩具小人把小南的眼镜藏了起来。小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外。如下图: 这时singer告诉小南一个谜......
  • 洛谷题单算法1-6二分查找与二分答案
    代码仅供参考,不足之处望理解。P2249【深基13.例1】查找#include<iostream>usingnamespacestd;constintN=1e6+5;intn,m,a[N];intmain(){ios::sync_with_stdio(false);//输入cin>>n>>m;for(inti=1;i<=n;i++)cin>>a[i];for(inti=1......
  • C105 整体二分+树状数组 P2617 Dynamic Rankings
    视频链接:C105整体二分+树状数组P2617DynamicRankings_哔哩哔哩_bilibili  C96树状数组套权值线段树P2617DynamicRankings-董晓-博客园(cnblogs.com)C104【模板】整体二分+树状数组P3834可持久化线段树2-董晓-博客园(cnblogs.com)LuoguP2617Dynamic......
  • 洛谷P3498 [POI2010] KOR-Beads 题解
    P3498[POI2010]KOR-Beads对于数列${A_i}$,求$k$使数列被分为$\lfloor\frac{n}{k}\rfloor$个部分后不同子数列种类最多(子串翻转前后为一类子串)很容易想到:枚举$k\\in\[1,n]$,记录每个$k$下不同种类数,然后取最优即可,那么问题来了:如何计算种类数?暴戾算法:一种纯......
  • C语言:洛谷题目分享(4)小书童--凯撒密码和笨小猴
    目录1.前言2.俩道题目1.小书童--凯撒密码1.题目背景2.题目描述3.输入格式4.输出格式5.题解2.笨小猴1.题目描述2.输入格式3.输出格式4.题解3.小结1.前言哈喽大家好啊,今天我继续为大家分享洛谷题单的俩道题目,请大家多多支持喔~2.俩道题目1.小书童--凯撒密码......