【原题题面】传送门

【大致题意】

  • 给定一个长度为n的非负整数序列a,你需要支持以下操作:
  • 1:给定l,r,输出a[l]+a[l+1]+…+a[r]。
  • 2:给定l,r,x,将a[l],a[l+1],…,a[r]对x取模。
  • 3:给定k,y,将a[k]修改为y。

【数据范围】

  n,m<=100000,a[i],x,y<=109

【题解大意】

维护最大值和区间和,然后通过最大值有没有超过x来判断需不需要取模操作。

【code】

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define rep(k,i,j) for(int k = i;k <= j; ++k)
#define FOR(k,i,j) for(int k = i;k >= j; --k)
inline int read(){
int x=,f=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-; ch=getchar();}
while(ch>=''&&ch<=''){x=(x<<)+(x<<)+ch-''; ch=getchar();}
return x*f;
}
#define ls rt<<1
#define rs rt<<1|1
const int mxn = 1e5+;
struct T {ll s;int mx;} tr[mxn<<];
int a[mxn],n,q;
inline void build(int rt,int l,int r){
if(l==r){
tr[rt].s = tr[rt].mx = a[l];
return;
}
int m = l+r >>;
build(ls,l,m),build(rs,m+,r);
tr[rt].s = tr[ls].s + tr[rs].s;
tr[rt].mx = max(tr[ls].mx,tr[rs].mx);
}
inline void update(int rt,int l,int r,int lp,int rp,int x){
if(tr[rt].mx < x) return;
if(lp==rp){
tr[rt].s = tr[rt].mx %= x;
return;
}
int m = lp+rp >>;
if(l<=m) update(ls,l,r,lp,m,x);
if(r>m) update(rs,l,r,m+,rp,x);
tr[rt].s = tr[ls].s + tr[rs].s;
tr[rt].mx = max(tr[ls].mx,tr[rs].mx);
}
inline void update1(int rt,int lp,int rp,int k,int y){
if(lp==rp){
tr[rt].s = tr[rt].mx = y;
return;
}
int m = lp+rp >>;
if(k<=m) update1(ls,lp,m,k,y);
else update1(rs,m+,rp,k,y);
tr[rt].s = tr[ls].s + tr[rs].s;
tr[rt].mx = max(tr[ls].mx,tr[rs].mx);
}
inline ll query(int rt,int lp,int rp,int l,int r){
if(l<=lp&&rp<=r) {return tr[rt].s;}
int m = lp+rp >>;
ll ans = ;
if(l<=m) ans += query(ls,lp,m,l,r);
if(r>m) ans += query(rs,m+,rp,l,r);
return ans;
}
int main(){
n = read(),q = read();
rep(i,,n) a[i] = read();
build(,,n);
while(q--){
int opt = read();
if(opt==){
int l = read(),r = read();
printf("%lld\n",query(,,n,l,r));
}
if(opt==){
int l = read(),r = read(),x = read();
update(,l,r,,n,x);
}
if(opt==){
int k = read(),y = read();
update1(,,n,k,y);
}
}
return ;
}

【调试中出过的错】

1.关于小于号和小于等于

2.关于l与lp(r与rp)的大小

【codeforces 438D】The Child and Sequence的更多相关文章

  1. 【47.40%】【codeforces 743B】Chloe and the sequence

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  2. 【 CodeForces - 392C】 Yet Another Number Sequence (二项式展开+矩阵加速)

    Yet Another Number Sequence Description Everyone knows what the Fibonacci sequence is. This sequence ...

  3. CodeForces - 438D: The Child and Sequence(势能线段树)

    At the children's day, the child came to Picks's house, and messed his house up. Picks was angry at ...

  4. 【Codeforces 3D】Least Cost Bracket Sequence

    Codeforces 3 D 题意:有一个括号序列,其中一些位置是问号,把第\(i\)个问号改成(需要\(a_i\)的代价,把它改成)需要\(b_i\)的代价. 问使得这个括号序列成立所需要的最小代价 ...

  5. 【codeforces 415D】Mashmokh and ACM(普通dp)

    [codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...

  6. 【codeforces 466D】Increase Sequence

    [题目链接]:http://codeforces.com/problemset/problem/466/D [题意] 给你n个数字; 让你选择若干个区间; 且这些区间[li,ri]; 左端点不能一样; ...

  7. 【codeforces 602D】Lipshitz Sequence

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  8. 【66.47%】【codeforces 556B】Case of Fake Numbers

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  9. 【35.29%】【codeforces 557C】Arthur and Table

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

随机推荐

  1. TPS6116x 1-wire总线的分析与驱动实现

    1-wire总线的特点 1-wire协议是用一条数据线作为总线进行数据通信的协议. 1-wire总线有以下特点: 1. 可以组建网络,个数没有限制. 2. 使用GPIO的特性就可以,不需要专门的控制器 ...

  2. 初入 vue

    基于 vue.js 的前端开发环境,用于前后端分离后的单页应用开发. 搭建 vue 项目 按官方指引,使用 vue-cli 搭建 vue 的项目. # 安装依赖库,建议指定 vue 和 element ...

  3. 加壳软件-Virbox Protector Standalone

    Virbox Protector Standalone 加壳工具 防止代码反编译,更安全,更方便 产品简介 Virbox Protector Standalone提供了强大的代码虚拟化.高级混淆与智能 ...

  4. centos7mini静默安装oracle11gr2

    [root@oracle ~]# cat /etc/hosts127.0.0.1 oracle.osp.cloud localhost localhost.localdomain localhost4 ...

  5. 编程填空:第i位替换

    编程填空:第i位替换 OpenJudge 总时间限制:1000ms 内存限制:1024kB 描述:写出函数中缺失的部分,使得函数返回值为一个整数,该整数的第i位和m的第i位相同,其他位和n相同. 请使 ...

  6. 全志A33编译环境搭建

    0x00 环境说明: 所使用的开发板为锐尔威视的插针版A33_Vstar 主机系统为WIN10 1809 x64,并且安装VMware Workstation Pro 下载64位的Ubuntu安装镜像 ...

  7. Windows 2008 r2上安装MySQL

    用MSI安装包安装 根据自己的操作系统下载对应的32位或64位安装包.按如下步骤操作: MySQL数据库官网的下载地址http://dev.mysql.com/downloads/mysql,第一步: ...

  8. web自动化测试python+selenium学习总结----selenium安装、浏览器驱动下载

    一.安装selenium 命令安装selenium库 :pip  install -U selenium 查看selenium是否安装成功:pip list PS:有时会有异常,安装失败,可以尝试去s ...

  9. 目标检测方法——R-FCN

    R-FCN论文阅读(R-FCN: Object Detection via Region-based Fully Convolutional Networks ) 目录 作者及相关链接 方法概括 方法 ...

  10. js统计字数

    <div class="toolcode"> <style type="text/css"> .num { font-size: 14p ...