Codeforces 438D The Child and Sequence
题意:给定一个n个数的序列,完成以下3个操作:
1.给定区间求和
2.给定区间对x取模
3.单点修改
对一个数取模,这个数至少折半。于是我们记一个最大值max,如果x>max则不做处理。
#include<stdio.h>
#include<algorithm>
using namespace std;
#define MAXN 1000000+10
typedef long long LL;
struct tree{LL mx,sum;}tr[MAXN<<];
int n,m;
LL a[MAXN];
void build(int k,int l,int r){
if(l==r){
tr[k].mx=tr[k].sum=a[l];
return;
}
int mid=(l+r)>>;
build(k<<,l,mid);
build(k<<|,mid+,r);
tr[k].mx=max(tr[k<<].mx,tr[k<<|].mx);
tr[k].sum=tr[k<<].sum+tr[k<<|].sum;
}
LL sum(int k,int l,int r,int L,int R){
if(l>=L&&r<=R)return tr[k].sum;
int mid=(l+r)>>;
if(R<=mid)return sum(k<<,l,mid,L,R);
else if(L>mid)return sum(k<<|,mid+,r,L,R);
else return sum(k<<,l,mid,L,R)+sum(k<<|,mid+,r,L,R);
tr[k].mx=max(tr[k<<].mx,tr[k<<|].mx);
tr[k].sum=tr[k<<].sum+tr[k<<|].sum;
}
void update(int k,int l,int r,int t,LL x){
if(l==t&&r==t){
tr[k].mx=tr[k].sum=x;
return;
}
int mid=(l+r)>>;
if(t<=mid)update(k<<,l,mid,t,x);
if(t>mid)update(k<<|,mid+,r,t,x);
tr[k].mx=max(tr[k<<].mx,tr[k<<|].mx);
tr[k].sum=tr[k<<].sum+tr[k<<|].sum;
}
void mod(int k,int l,int r,int L,int R,LL x){
if(tr[k].mx<x)return;
if(l==r){
tr[k].mx%=x;
tr[k].sum%=x;
return;
}
int mid=(l+r)>>;
if(R<=mid)mod(k<<,l,mid,L,R,x);
else if(L>mid)mod(k<<|,mid+,r,L,R,x);
else mod(k<<,l,mid,L,R,x),mod(k<<|,mid+,r,L,R,x);
tr[k].mx=max(tr[k<<].mx,tr[k<<|].mx);
tr[k].sum=tr[k<<].sum+tr[k<<|].sum;
}
int main(){
//freopen("mod.in","r",stdin);
//freopen("mod.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)scanf("%I64d",&a[i]);
build(,,n);
while(m--){
int opt;
scanf("%d",&opt);
if(opt==){
int l,r;
scanf("%d%d",&l,&r);
printf("%I64d\n",sum(,,n,l,r));
}
if(opt==){
int l,r;LL x;
scanf("%d%d%I64d",&l,&r,&x);
mod(,,n,l,r,x);
}
if(opt==){
int k;LL y;
scanf("%d%I64d",&k,&y);
update(,,n,k,y);
}
}
return ;
}
Codeforces 438D The Child and Sequence的更多相关文章
- 题解——CodeForces 438D The Child and Sequence
题面 D. The Child and Sequence time limit per test 4 seconds memory limit per test 256 megabytes input ...
- 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 ...
- 2018.07.23 codeforces 438D. The Child and Sequence(线段树)
传送门 线段树维护区间取模,单点修改,区间求和. 这题老套路了,对一个数来说,每次取模至少让它减少一半,这样每次单点修改对时间复杂度的贡献就是一个log" role="presen ...
- CodeForces 438D The Child and Sequence (线段树 暴力)
传送门 题目大意: 给你一个序列,要求在序列上维护三个操作: 1)区间求和 2)区间取模 3)单点修改 这里的操作二很讨厌,取模必须模到叶子节点上,否则跑出来肯定是错的.没有操作二就是线段树水题了. ...
- 438D - The Child and Sequence
D. The Child and Sequence time limit per test 4 seconds memory limit per test 256 megabytes input st ...
- CF(438D) The Child and Sequence(线段树)
题意:对数列有三种操作: Print operation l, r. Picks should write down the value of . Modulo operation l, r, x. ...
- Codeforces 438D (今日gg模拟第二题) | 线段树 考察时间复杂度的计算 -_-|||
Codeforces 438D The Child and Sequence 给出一个序列,进行如下三种操作: 区间求和 区间每个数模x 单点修改 如果没有第二个操作的话,就是一棵简单的线段树.那么如 ...
- Codeforces Round #250 (Div. 1) D. The Child and Sequence 线段树 区间取摸
D. The Child and Sequence Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest ...
- Codeforces Round #250 (Div. 1) D. The Child and Sequence(线段树)
D. The Child and Sequence time limit per test 4 seconds memory limit per test 256 megabytes input st ...
随机推荐
- python3 字符串操作相关函数
整理自python基础|菜鸟教程 感谢菜鸟教程提供的优质资源! 1.capitalize() 将字符串的第一个字符转换为大写 实例 以下实例展示了capitalize()方法的实例: #!/usr/b ...
- 关于C++中vector和set使用sort方法进行排序
C++中vector和set都是非常方便的容器, sort方法是algorithm头文件里的一个标准函数,能进行高效的排序,默认是按元素从小到大排序 将sort方法用到vector和set中能实现多种 ...
- 简易RPC框架-代理
*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...
- HTML5对音视频的处理
前 言 现在网上有许多的框架和插件,能够满足程序猿的各种需求,慢慢的,就有些忽视最基础的东西. 比如,大多数视频是通过插件(比如 Flash)来显示的.然而,并非所有浏览器都拥有同样的插件. H ...
- C# 关闭窗体立即停止进程
C#在关闭窗体的时候,有时线程还在后台执行,没有及时退出. 处理方案: 为Form添加FormClosing事件,加入以下语句,在退出时,杀死本进程. System.Diagnostics.Proce ...
- MyEclipse10激活方法
背景:因为以前一直使用的是myeclipse8.6版本,但因为版本太低有些功能不支持,于是想试用下myeclipse10.0版本,但是下载后发现需要激活,但在激活的过程中遇到了很多坑,于是便有了本文的 ...
- [转载] 应用于负载均衡的一致性哈希及java实现
转载自http://blog.csdn.net/haitao111313/article/details/7537799 这几天看了几遍一致性哈希的文章,但是都没有比较完整的实现,因此试着实现了一下, ...
- 重构手法之Introduce Explaining Variable(引用解释性变量)
返回总目录 6.5Introduce Explaining Variable(引用解释性变量) 概要 你有一个复杂的表达式. 将该复杂表达式(或其中一部分)的结果放进一个临时变量,以此变量名称来解释表 ...
- 微信小程序开发《三》:微信小程序请求不能使用session的原因及解决办法
本人在前面的微信小程序开发<二>中提到要想在服务端保持状态需要在客户端第一次请求服务器的时候给客户端返回一个sessionid,由客户端在本地保存,下次请求的时候在header里面带上这个 ...
- django实现分片上传文件
目标:利用django实现上传文件功能 1,先设置路由系统 urls.py from django.conf.urls import url,include from django.contrib i ...