首页 > 其他分享 >POJ--3468 A Simple Problem with Integers(线段树/树状数组)

POJ--3468 A Simple Problem with Integers(线段树/树状数组)

时间:2024-02-25 11:44:39浏览次数:26  
标签:Integers 树状 -- sum 3468 int MAXN 数组 ask

记录
11:03 2024-2-25

http://poj.org/problem?id=1961

  1. 线段树

  2. 树状数组

把区间增加转变为单点增加,利用两个树状数组\(c_0 和 c_1\)
将”C l r d" 转化为

  1. 在树状数组\(c_0\)中,把位置l上的数加d
  2. 在树状数组\(c_0\)中,把位置r + 1上的数减d
  3. 在树状数组\(c_1\)中,把位置l上的数加l * d
  4. 在树状数组\(c_1\)中,把位置r + 1上的数减(r + 1) * d

建立sum存储a的原始前缀和
将“Q l r” 转化为 1~r 和 1~l-1两部分进行相减
$ (sum[r] + (r + 1) * ask(c_0, r) - ask(c_1, r)) - (sum[l - 1] + l * ask(c_0, l - 1) - ask(c_1, l - 1)) $

点击查看代码
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long ll;

const int MAXN = 100005;
int N, Q;
ll a[MAXN], sum[MAXN];
ll c[2][MAXN];

// k表示是哪个树状数组,i表示位置, v表示加入的值
void add(int k, int i, int v) {
    while (i <= N){
        c[k][i] += v;
        i += i & -i;
    }
}

// k表示是哪个树状数组,i表示位置
ll ask(int k, int i) {
    ll s = 0;
    while (i > 0) {
        s += c[k][i];
        i -= i & -i;
    }
    return s;
}

int main() {
    cin >> N >> Q;
    for(int i = 1; i <= N; i++) {
        scanf("%lld", &a[i]);
        sum[i] = sum[i - 1] + a[i];
    }
    char c[2];
    int l, r, v;
    for(int i = 0; i < Q; i++) {
        // %s 它会读入一个不含空格、TAB和回车符的字符串,存入字符数组
        // %c 会读入\n
        scanf("%s%d%d", c, &l, &r);
        if(c[0] == 'C') {
            scanf("%d", &v);
            add(0, l, v);
            add(0, r + 1, -v);
            add(1, l, l * v);
            add(1, r + 1, -(r + 1) * v);
        } else {
            ll result = (sum[r] + (r + 1) * ask(0, r) - ask(1, r))
                        - (sum[l - 1] + l * ask(0, l - 1) - ask(1, l - 1));
            printf("%lld\n", result);
        }
    }
}

标签:Integers,树状,--,sum,3468,int,MAXN,数组,ask
From: https://www.cnblogs.com/57one/p/18032161

相关文章

  • python——面向对象——知识汇总
    面向对象技术简介类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。方法:类中定义的函数。类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。......
  • OpenResty中如何实现,按QPS、时间范围、来源IP进行限流
    OpenResty是一个基于Nginx与Lua的高性能Web平台,它通过LuaJIT在Nginx中运行高效的Lua脚本和模块,可以用来处理复杂的网络请求,并且支持各种流量控制和限制的功能。近期研究在OpenResty中如何实现,按QPS、时间范围、来源IP进行限流,以及动态更新限流策略。今天将实现方案分享给大家。......
  • CF1923 VP 记录
    CF1923VP记录AB跳了。C.FindB赛时切了。题意如果存在一个整数数组\(b\)满足以下条件,则认为一个整数数组\(a\)是好的:\(|b|=|a|\)。\(a_i\neqb_i\)。\(\sumb=\suma\)。\(b_i>0\)。给定一个数组\(c\),\(q\)次询问,要求判断\(c[l,r]\)是不是好的数组。可以......
  • 洛谷题单指南-贪心-P1208 [USACO1.3] 混合牛奶 Mixing Milk
    原题链接:https://www.luogu.com.cn/problem/P1208题意解读:就是一个部分背包问题,贪心模版题。解题思路:优先选择单价低的牛奶即可。100分代码:#include<bits/stdc++.h>usingnamespacestd;constintN=5005;structfarmer{intprice,count;}f[N];boolcmp(fa......
  • 通达信行情分盘指标公式源码副图
    {股票指标}VAR1:=Ema(EMA(CLOSE,9),9);VR:=(VAR1-REF(VAR1,1))/REF(VAR1,1)*1000;stICKLINE(vr<0,VR,0,0,0),COLORCCCCCC;A10:=crOSS(VR,0);灰色没有行情:IF(VR<0,VR,0),COLORCCCCCC,LINETHICK0;红色行情出现:IF(A10,5,0),LINETHICK0,COLOR00AAAA;DRAWTEXT(A10,-5,'起......
  • 通达信操盘量能指标公式源码副图
    {股票指标}{指标介绍:1、该指标成交量超过135均线,为成交量放大--为主力异动。35均线为洗盘异动线,成交量超过35均线,洗盘结束。5均线上穿35均线,可以考虑开始进场。出现黄色量能柱时为买入更可信!2、成交量上绿下红,为诱空信号,一般出现在上升通道,出现此形态可多买股票(类似殷保华理......
  • 8
    《程序是怎样跑起来的》第八章读后感第八章主要探讨了计算机中的数据处理和运算过程,内容深入到了计算机内部的核心机制。在阅读这一章之后,我对计算机如何高效地处理数据和执行运算有了更为深刻的理解。首先,这一章详细阐述了计算机内部数据的表示方式,包括二进制、十进制和十六进......
  • 通达信【竞价强弱排序】竞价绝杀用于全A股 主做一进二模式 竞价直接结束战斗 短期内的
    {股票指标} 弄明白竞价是怎么回事,避免小白入坑,竞价不适合每一个人,不喜者请绕道竞价公式函数不能回测,请注意,不喜者请绕道集合竞价抓涨停的公式,每天的胜率都不一样哦,但是朋友们要注意第二天是不是能不能冲高走也是一个非常重要的参考因素,而不是当天涨停了就好了 第一点,竞......
  • 9
    《程序是怎样跑起来的》第九章读后感第九章在《程序是怎样跑起来的》这本书中,为我们揭示了计算机程序执行的详细过程,从程序的加载到执行,再到最终的结果输出,每一个步骤都进行了深入的剖析。阅读完这一章后,我对程序的运行过程有了更加清晰和深入的认识。首先,我被作者对于程序加载......
  • pinia
    Pinia学习Vue3中使用官网:https://pinia.web3doc.top/introduction.html安装yarnaddpinia#或者使用npmnpminstallpinia使用main.js中引入并注册import{createApp}from'vue'import{createPinia}from'pinia'import'./style.css'impor......