首页 > 其他分享 >区间修改,单点查询的树状数组

区间修改,单点查询的树状数组

时间:2024-02-01 15:24:40浏览次数:28  
标签:单点 cout 树状 int LL cin long add 数组

#include <bits/stdc++.h>
#define CLOSE ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define endl "\n"
typedef long long LL;
const int N = 1e6 + 10, M = N, mod = 1e9 + 7;
using namespace std;
int a[N], b[N], n, q;
LL  t[N];
int lowbit(int x) {return x & -x;}
void add(int x, int c){
    for(int i = x; i <= n; i += lowbit(i)){
        t[i] += c;
    }
}
LL getsum(int x){
    LL sum = 0;
    for(int i = x; i; i -= lowbit(i)){
        sum += t[i];
    }
    return sum;
}
int main()
{
    CLOSE;
    cin >> n >> q;
    for(int i = 1; i <= n; i ++){
        cin >> a[i];
    }
    for(int i = 1; i <= n; i ++){
        b[i] = a[i] - a[i - 1];
        add(i, b[i]);
    }
    while(q --){
        int op;
        cin >> op;
        if(op == 1){
            int l, r, k;
            cin >> l >> r >> k;
            add(r + 1, -k), add(l, k);
        } else{
            int k;
            cin >> k;
            cout << getsum(k)<< endl;
        }
    }
    return 0;
}

标签:单点,cout,树状,int,LL,cin,long,add,数组
From: https://www.cnblogs.com/acwhr/p/18001328

相关文章

  • 区间修改+区间查询的树状数组
    /*https://www.acwing.com/solution/content/44886/看acwing*/#include<bits/stdc++.h>#defineCLOSEios::sync_with_stdio(false);cin.tie(0);cout.tie(0)#defineendl"\n"typedeflonglongLL;constintN=1e6+10,M=N,mod=1e9+7;u......
  • 数组的度
    697.DegreeofanArray(Easy)给定一个非空且只包含非负数的整数数组nums,数组的度的定义是指数组里任一元素出现频数的最大值。你的任务是找到与nums拥有相同大小的度的最短连续子数组,返回其长度。示例1:输入:[1,2,2,3,1]输出:2解释:输入数组的度是2,因为元......
  • 嵌套数组
    565.ArrayNesting(Medium)Input:A=[5,4,0,3,1,6,2]Output:4Explanation:A[0]=5,A[1]=4,A[2]=0,A[3]=3,A[4]=1,A[5]=6,A[6]=2.OneofthelongestS[K]:S[0]={A[0],A[5],A[6],A[2]}={5,6,2,0}题目描述:S[i]表示一个集合,集合的第一个......
  • 后缀数组好题选讲
    CodeForces616FExpensiveStringshttps://codeforces.com/problemset/problem/616/FProblemtagsstringsuffixstructuresstrings*2700ProblemStatement给定\(n\)个字符串\(t_1,t_2,\dots,t_n\)。每个字符串有一个权值,对于\(1\leqi\leqn\),有\(t_i\)的权......
  • Java 数组
    数组数组是相同类型数据的有序集合。数组的声明和创建publicclassDemo01{//变量的类型变量的名字=变量的值//数组类型publicstaticvoidmain(String[]args){//首先声明数组变量int[]nums;//定义,首选这种intnums2[]......
  • const copyStories = [...stories] 和 let storiesToDisplay = stories.slice(); 两
    constcopyStories=[...stories]和letstoriesToDisplay=stories.slice();两种复制数组的方式,哪种更优雅?在JavaScript中,constcopyStories=[...stories](使用扩展运算符)和letstoriesToDisplay=stories.slice()都可以用来复制数组,并且都能生成一个新的数组。这两种......
  • golang 使用hex包,转换文件的16进制字符、16进制字节数组
    某些特殊情况下需要根据文件的16进制转换成字符在linux系统用vim保存一个文件,写入两行内容这是测试A这是测试B用linux的xxd命令输出文件的16进制字节数组xxd-g1-it.txtunsignedchart_txt[]={0xe8,0xbf,0x99,0xe6,0x98,0xaf,0xe6,0xb5,0x8b,0x......
  • 鸿蒙二进制数组创建
    背景c++层数据都是二进制,需要转换成arrayBuffer透传到ets层给业务使用,但是鸿蒙的使用下面两个api创建出来的二进制数组数据都是错误的。接口napi_create_arraybuffer:这个接口只能创建空的二进制数组,没办法把char的内容丢进去创建napi_create_external_arraybuffer:这个接口支持......
  • el-form的对象数组数组校验
    el-form绑定的是一个对象,但在有些时候提交的表单中会有数组数据,校验有点不符合常理例如这样的一个表单,付款方是个数组,这种怎么校验呢。上代码用的循环el-form,:model绑定循环的item,也就是数组中的单个对象,然后prop绑定参数,rules正常写,然后提交的时候,因为el-form是循环的,所......
  • js中对数组的unshift是什么操作,为什么使用unshift进行命名?
    在JavaScript中,unshift()是数组对象的一个原生方法,它用于向数组的开头添加一个或多个元素,并将原有的数组元素依次向后移动。这个方法会改变原始数组本身,同时返回新的数组长度。在英语中,“unshift”不是一个标准的单词,但我们可以将其拆解为“un-”和“shift”。其中:“un-”是......