POJ 3468 A Simple Problem with Integers(线段树 成段增减+区间求和)

news/2024/7/4 13:14:18

A Simple Problem with Integers

【题目链接】A Simple Problem with Integers

【题目类型】线段树 成段增减+区间求和

&题解:

线段树 成段增减+区间求和 模板题 这种题真的应该理解并且可以流畅的独立码出来了

【时间复杂度】\(O(nlogn)\)

&代码:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
typedef long long ll;
const int INF = 0x3f3f3f3f;
#define cle(a,val) memset(a,(val),sizeof(a))
#define SI(N) scanf("%d",&(N))
#define SII(N,M) scanf("%d %d",&(N),&(M))
#define SIII(N,M,K) scanf("%d %d %d",&(N),&(M),&(K))
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define red(i,a,b) for(int i=(a);i>=(b);i--)
const ll LINF = 0x3f3f3f3f3f3f3f3f;
#define PU(x) cout<<#x<<endl;
#define PI(A) cout<<(A)<<endl;
#define DG(x) cout<<#x<<"="<<(x)<<endl;
#define DGG(x,y) cout<<#x<<"="<<(x)<<" "<<#y<<"="<<(y)<<endl;
#define DGGG(x,y,z) cout<<#x<<"="<<(x)<<" "<<#y<<"="<<(y)<<" "<<#z<<"="<<(z)<<endl;
#define PIar(a,n) rep(i,0,n-1)cout<<a[i]<<" ";PU()
#define PIarr(a,n,m) rep(aa,0,n-1){rep(bb,0,m-1)cout<<a[aa][bb]<<" ";PU()}
typedef pair<int, int> pii;
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define sz(x) int(x.size())
#define all(x) x.begin(),x.end()
const double EPS = 1e-9 ;
/*     C o d i n g  S p a c e     */

#define lsn b,m,rt<<1
#define rsn m+1,e,rt<<1|1

const int maxn = (int)1e5 + 9 ;
int n,q,a[maxn];
ll seg[maxn<<2],si[maxn<<2];
void puup(int rt) {
    seg[rt]=seg[rt<<1]+seg[rt<<1|1];
}
void pudo(int len,int rt) {
    if(si[rt]) {
        si[rt<<1]+=si[rt];
        si[rt<<1|1]+=si[rt];
        seg[rt<<1]+=si[rt]*(len-len/2);
        seg[rt<<1|1]+=si[rt]*(len/2);
        si[rt]=0;
    }
}
void build(int b,int e,int rt) {
    if(b==e) {
        seg[rt]=a[b];
        return ;
    }
    int m=b+e>>1;
    build(lsn);
    build(rsn);
    puup(rt);
}
ll query(int l,int r,int b,int e,int rt) {
    if (l<=b&&e<=r) {
        return seg[rt];
    }
    pudo(e-b+1,rt);
    int m=b+e>>1;
    ll ans=0;
    //小于等于m的全在左儿子  大于m的全在右儿子
    //如果需要求的区间[l,r]最左边的那个(也就是l) 小于等于m 那么就一定要往左儿子走
    //反之 如果区间[l,r]最右边的那个(也就是r) 大于m 那么就一定要走向右儿子
    if (l<=m)
        ans+=query(l,r,lsn);
    if (m<r)
        ans+=query(l,r,rsn);
    return ans;
}
void upda(int l,int r,ll xx,int b,int e,int rt) {
    if (l<=b&&e<=r) {
        si[rt]+=xx;
        seg[rt]+=(e-b+1)*xx;
        return;
    }
    pudo(e-b+1,rt);
    int m=b+e>>1;
    if (l<=m)
        upda(l,r,xx,lsn);
    if (m<r)
        upda(l,r,xx,rsn);
    puup(rt);
}
void Solve() {
    scanf("%d%d",&n,&q);
    rep(i,1,n) scanf("%d",&a[i]);
    build(1,n,1);
    rep(o,1,q) {
        char op[9];
        int x,y,z;
        scanf("%s",op);
        if (op[0]=='Q') {
            scanf("%d%d",&x,&y);
            printf("%lld\n",query(x,y,1,n,1));
        }
        else {
            scanf("%d%d%d",&x,&y,&z);
            upda(x,y,z,1,n,1);
        }
    }
}
int main() {
//iostream::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    // int T;cin>>T;while(T--)
    Solve();
    return 0;
}

转载于:https://www.cnblogs.com/s1124yy/p/6223988.html


http://www.niftyadmin.cn/n/4243175.html

相关文章

计算机网络四个阶段特点,计算机网络的发展分哪四个阶段,特点?

简单地说,计算机网络就是通过电缆、电话线或无线通讯将两台以上的计算机互连起来的集合.按计算机联网的地理位置划分,网络一般有两大类&#xff1a;广域网和局域网.Internet网(因特网,许多人也称其为互联网)是最典型的广域网,它们通常连接着范围非常巨大的区域.我国比较著名的中…

[异常解决] windows用SSH和linux同步文件linux开启SSHssh client 报 algorithm negotiation failed的解决方法之一...

1、安装、配置与启动 SSH分客户端openssh-client和openssh-server 如果你只是想登陆别的机器的SSH只需要安装openssh-client&#xff08;ubuntu有默认安装&#xff0c;如果没有则sudo apt-get install openssh-client&#xff09;&#xff0c;如果要使本机开放SSH服务就需要安装…

厦门集美大学的计算机专业,2017集美大学各专业录取分数线

集美大学是省属多科性大学&#xff0c;是福建省重点建设高校、福建省本科一批招生高校、交通运输部与福建省共建高校、博士学位授予单位。各专业录取分数线是多少呢?下面学习啦小编为你整理了2017集美大学各专业录取分数线&#xff0c;希望对你有帮助。2017厦门集美大学分数线…

VS项目中使用Nuget还原包后编译生产还一直报错?

Nuget官网下载Nuget项目包的命令地址&#xff1a;https://www.nuget.org/packages 今天就遇到一个比较奇葩的问题&#xff0c;折腾了很久终于搞定了&#xff1a; 问题是这样的:我的解决方案原本是好好的&#xff0c;但是其他朋友加个一个项目&#xff0c;我获取最新后&#…

npoi html富文本,c#NPOI导出

按行列导出数据&#xff1a;HSSFWorkbook hssfworkbook new HSSFWorkbook();  //命名空间&#xff1a;using NPOI.HSSF.UserModel;Sheet sheet1 hssfworkbook.CreateSheet("Sheet1");  //命名空间&#xff1a;using NPOI.SS.UserModel;sheet1.CreateRow(0).Cre…

局部和全局案例!!

name 潘金莲 def meili():name "武松"def keai():nonlocal namename 武大郎print(name)keai()print(name) meili() print(name)转载于:https://www.cnblogs.com/huangjinshan/p/6233604.html

祝福我的朋友们:2017年新年快乐?

转载于:https://www.cnblogs.com/nedtwo/p/6233630.html

idea vue html报错,idea使用Vue的v-bind,v-on报错

vue 使用webpack打包后路径报错以及 alias 的使用一.vue 使用webpack打包后路径报错(两步解决) 1. config文件夹 > index.js > 把assetsPublicPath的 / 改为 ./ 2. b ...Vue学习笔记-vue-element-admin 按装报错再按装一 使用环境 开发系统: windows 后端IDE: PyCharm 前…