AcWing242. 一个简单的整数问题 (树状数组+差分)

简介: 笔记

AcWing242. 一个简单的整数问题()


给定长度为N的数列A,然后输入M行操作指令。


第一类指令形如“C l r d”,表示把数列中第l~r个数都加d。


第二类指令形如“Q X”,表示询问数列中第x个数的值。


对于每个询问,输出一个整数表示答案。


输入格式

第一行包含两个整数N和M。


第二行包含N个整数A[i]。


接下来M行表示M条指令,每条指令的格式如题目描述所示。


输出格式

对于每个询问,输出一个整数表示答案。


每个答案占一行。


数据范围9.png


代码

#include<iostream>
#include<cstdio>
#include<queue>
#include<string>
#include<cstring>
#include<map>
#include<vector>
#include<set>
#include<stack>
#include<algorithm>
#include<vector>
#include<utility>
#include<deque>
#include<unordered_map>
#define INF 0x3f3f3f3f
#define mod 1000000007
#define endl '\n'
#define eps 1e-6
inline int gcd(int a, int b) { return b ? gcd(b, a % b) : a; }
inline int lowbit(int x) { return x & -x; }
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int, int> PII;
const int N = 100010;
int n, m;
int a[N], tr[N];
void add(int x, int c) {
  for (int i = x;i <= n;i += lowbit(i))tr[i] += c;
}
LL sum(int x) {
  LL res = 0;
  for (int i = x;i;i -= lowbit(i))res += tr[i];
  return res;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1;i <= n;++i)scanf("%d", &a[i]);
  for (int i = 1;i <= n;++i)add(i, a[i] - a[i - 1]);
  while (m--) {
    char op[2];
    int l, r, d;
    scanf("%s%d", op, &l);
    if (op[0] == 'C') {
      scanf("%d%d", &r, &d);
      add(l, d), add(r + 1, -d);
    }
    else {
      printf("%lld\n", sum(l));
    }
  }
  return 0;
}


目录
相关文章
|
关系型数据库 MySQL 数据库
MySQL数据库期末项目 图书馆管理系统(上)
MySQL数据库期末项目 图书馆管理系统
700 0
|
Scala 流计算
Flink / Scala - 使用 CountWindow 实现按条数触发窗口
CountWindow 数量窗口分为滑动窗口与滚动窗口,类似于之前 TimeWindow 的滚动时间与滑动时间,这里滚动窗口不存在元素重复而滑动窗口存在元素重复的情况,下面 demo 场景为非重复场景,所以将采用滚动窗口。......
1116 0
Flink / Scala - 使用 CountWindow 实现按条数触发窗口
|
运维 索引
Elasticsearch 写入优化探索:是什么影响了refresh 耗时?
Elasticsearch 写入优化探索:是什么影响了refresh 耗时?
|
机器学习/深度学习 算法 决策智能
【机器学习】揭秘深度学习优化算法:加速训练与提升性能
【机器学习】揭秘深度学习优化算法:加速训练与提升性能
Playwright 测试重试
Playwright 测试重试
314 2
|
XML Java 数据库
Spring boot的最全注解
Spring boot的最全注解
399 4
|
存储 Java 编译器
|
存储 Android开发
Android 高版本 packageManager.getPackageArchiveInfo 总是返回null
Android 高版本 packageManager.getPackageArchiveInfo 总是返回null
552 1
|
算法 Unix Linux
select函数中的文件描述符(File Descriptor)范围
select函数中的文件描述符(File Descriptor)范围
311 0
select函数中的文件描述符(File Descriptor)范围
|
存储 NoSQL Java
基于springboot+Redis的前后端分离项目之分布式锁-redission(五)-【黑马点评】
基于setnx实现的分布式锁存在下面的问题: 重入问题:重入问题是指 获得锁的线程可以再次进入到相同的锁的代码块中,可重入锁的意义在于防止死锁,比如HashTable这样的代码中,他的方法都是使用synchronized修饰的,假如他在一个方法内,调用另一个方法,那么此时如果是不可重入的,不就死锁了吗?所以可重入锁他的主要意义是防止死锁,我们的synchronized和Lock锁都是可重入的。