【codeforces 438D】The Child and Sequence
【原题题面】传送门
【大致题意】
- 给定一个长度为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的更多相关文章
- 【47.40%】【codeforces 743B】Chloe and the sequence
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- 【 CodeForces - 392C】 Yet Another Number Sequence (二项式展开+矩阵加速)
Yet Another Number Sequence Description Everyone knows what the Fibonacci sequence is. This sequence ...
- 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 ...
- 【Codeforces 3D】Least Cost Bracket Sequence
Codeforces 3 D 题意:有一个括号序列,其中一些位置是问号,把第\(i\)个问号改成(需要\(a_i\)的代价,把它改成)需要\(b_i\)的代价. 问使得这个括号序列成立所需要的最小代价 ...
- 【codeforces 415D】Mashmokh and ACM(普通dp)
[codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...
- 【codeforces 466D】Increase Sequence
[题目链接]:http://codeforces.com/problemset/problem/466/D [题意] 给你n个数字; 让你选择若干个区间; 且这些区间[li,ri]; 左端点不能一样; ...
- 【codeforces 602D】Lipshitz Sequence
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- 【66.47%】【codeforces 556B】Case of Fake Numbers
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- 【35.29%】【codeforces 557C】Arthur and Table
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
随机推荐
- iconfont在线链接使用方法(转)
原文:https://blog.csdn.net/jinkingliao/article/details/51353937 基础流程就不多赘述,直接到http://www.iconfont.cn/官网 ...
- JVM深入:JDK8-废弃永久代(PermGen)迎来元空间(Metaspace)(转)
转载自:https://www.cnblogs.com/yulei126/p/6777323.html 1.背景 2.为什么废弃永久代(PermGen) 3.深入理解元空间(Metaspace) 4. ...
- RS232通信(Android)
一. 添加依赖dependencies { implementation 'com.github.kongqw:AndroidSerialPort:1.0.1'} 二. 使用方法 package co ...
- 创建存储过程 in,out,inout
in: 输入参数,存储过程如果修改了参数值,那么不能被返回. out:输出参数,存储过程中修改了参数值,可以被返回.inout:输入参数,存储过程如果修改了参数值,可以被返回 注意参数格式: in ...
- jenkins深入学习
一.jenkins深入学习 一.jenkins项目配置 1.Jenkins Gitlab持续集成打包平台搭建 http://blog.csdn.net/zgzhaobo/article/details ...
- 2019.04.16 python基础50
第五十一节 pycharm安装 https://www.jetbrains.com/pycharm/download/#section=windows 这是另一个叫jetbrains公司开发的 默认 ...
- Leetcode: Max Consecutive Ones II(unsolved locked problem)
Given a binary array, find the maximum number of consecutive 1s in this array if you can flip at mos ...
- Linux删除奇怪名字文件
use ls -ilrt get filenum and use find ./ -inum filenum -exec rm '{}' \; del it
- 读C#图解教程的笔记
第一章记录: 格式化字符串 Console.WriteLine("{0:D}", 123456789);//表示十进制字符串 Console.WriteLine("{0: ...
- js列表添加内容清除内容,时钟
<div id="wai"> <div id="zuo"> <select multiple="multiple&quo ...