线段树【CF620E】The Child and Sequence
Description
At the children's day, the child came to Picks's house, and messed his house up. Picks was angry at him. A lot of important things were lost, in particular the favorite sequence of Picks.
Fortunately, Picks remembers how to repair the sequence. Initially he should create an integer array \(a[1],a[2],...,a[n]\) Then he should perform a sequence of mm operations. An operation can be one of the following:
- Print operation \(l,r\) . Picks should write down the value of
.
- Modulo operation \(l,r,x\) . Picks should perform assignment $ a[i]=a[i] mod x $ for each \(i (l<=i<=r)\) .
- Set operation \(k,x\). Picks should set the value of \(a[k]\) to \(x\) (in other words perform an assignment \(a[k]=x\) ).
Can you help Picks to perform the whole sequence of operations?
Input
The first line of input contains two integer: n,mn,m (1<=n,m<=10^{5})(1<=n,m<=105) . The second line contains nn integers, separated by space: $ a[1],a[2],...,a[n] (1<=a[i]<=10^{9}) $ — initial value of array elements.
Each of the next mm lines begins with a number typetype
.
- If type=1type=1 , there will be two integers more in the line: $ l,r (1<=l<=r<=n) $ , which correspond the operation 1.
- If type=2type=2 , there will be three integers more in the line: $ l,r,x (1<=l<=r<=n; 1<=x<=10^{9}) $ , which correspond the operation 2.
- If type=3type=3 , there will be two integers more in the line: $ k,x (1<=k<=n; 1<=x<=10^{9}) $ , which correspond the operation 3.
Output
For each operation 1, please print a line containing the answer. Notice that the answer may exceed the 32-bit integer.
题目大意:
- 给出一个序列,进行如下三种操作:
- 区间求和
- 区间每个数模 xx
- 单点修改
- n,m≤100000
裸的线段树问题.,但是问题在于如何取模。
很容易想到的是,如果区间的最大值比取模的数小,那么我们就不需要修改。
因此,我们维护区间最大值。
但是如何修改?我们需要知道其位置。
因此,我们维护最大值位置,然后单点修改即可。
每次判断区间最大值时候比取模的数小。
如果小,那我们就不用取模,所以就可以切掉这个题了!
代码
#include<cstdio>
#include<iostream>
#include<algorithm>
#define int long long
#define R register
using namespace std;
const int gz=1e5+8;
inline void in(int &x)
{
int f=1;x=0;char s=getchar();
while(!isdigit(s)){if(s=='-')f=-1;s=getchar();}
while(isdigit(s)){x=x*10+s-'0';s=getchar();}
x*=f;
}
#define ls o<<1
#define rs o<<1|1
int tr[gz<<2],mx[gz<<2],val[gz],n,m;
inline int idmax(R int x,R int y)
{
return val[x]>val[y] ? x:y;
}
inline void up(R int o)
{
mx[o]=idmax(mx[ls],mx[rs]);
tr[o]=tr[ls]+tr[rs];
}
void build(R int o,R int l,R int r)
{
if(l==r)
{
tr[o]=val[l];
mx[o]=l;
return;
}
R int mid=(l+r)>>1;
build(ls,l,mid);
build(rs,mid+1,r);
up(o);
}
void change(R int o,R int l,R int r,R int pos,R int del)
{
if(l==r){tr[o]=val[l];return;}
R int mid=(l+r)>>1;
if(pos<=mid)change(ls,l,mid,pos,del);
else change(rs,mid+1,r,pos,del);
up(o);
}
int query(R int o,R int l,R int r,R int x,R int y)
{
if(x<=l and y>=r)return tr[o];
R int mid=(l+r)>>1,res=0;
if(x<=mid)res+=query(ls,l,mid,x,y);
if(y>mid)res+=query(rs,mid+1,r,x,y);
return res;
}
int query_max(R int o,R int l,R int r,R int x,R int y)
{
if(l==x and y==r) return mx[o];
R int mid=(l+r)>>1;
if(y<=mid) return query_max(ls,l,mid,x,y);
else if(x>mid)return query_max(rs,mid+1,r,x,y);
else return idmax(query_max(ls,l,mid,x,mid),query_max(rs,mid+1,r,mid+1,y));
}
signed main()
{
in(n);in(m);
for(R int i=1;i<=n;i++)in(val[i]);
build(1,1,n);
for(R int l,r,k,opt;m;m--)
{
in(opt);
switch(opt)
{
case 1:in(l),in(r),printf("%lld\n",query(1,1,n,l,r));break;
case 2:break;
case 3:in(l),in(r);val[l]=r;change(1,1,n,l,r);break;
}
if(opt==2)
{
in(l),in(r),in(k);
for(R int pos;;)
{
pos=query_max(1,1,n,l,r);
if(val[pos]<k)break;
val[pos]%=k;
change(1,1,n,pos,val[pos]);
}
}
}
}
线段树【CF620E】The Child and Sequence的更多相关文章
- 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 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 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 ...
- 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 Round #250 (Div. 1) D. The Child and Sequence 线段树 区间求和+点修改+区间取模
D. The Child and Sequence At the children's day, the child came to Picks's house, and messed his h ...
- [CF438D]The Child and Sequence【线段树】
题目大意 区间取模,区间求和,单点修改. 分析 其实算是一道蛮简单的水题. 首先线段树非常好解决后两个操作,重点在于如何解决区间取模的操作. 一开始想到的是暴力单点修改,但是复杂度就飙到了\(mnlo ...
- cf250D. The Child and Sequence(线段树 均摊复杂度)
题意 题目链接 单点修改,区间mod,区间和 Sol 如果x > mod ,那么 x % mod < x / 2 证明: 即得易见平凡, 仿照上例显然, 留作习题答案略, 读者自证不难. ...
- CF438D The Child and Sequence(线段树)
题目链接:CF原网 洛谷 题目大意:维护一个长度为 $n$ 的正整数序列 $a$,支持单点修改,区间取模,区间求和.共 $m$ 个操作. $1\le n,m\le 10^5$.其它数均为非负整数且 ...
- 2018.07.23 codeforces 438D. The Child and Sequence(线段树)
传送门 线段树维护区间取模,单点修改,区间求和. 这题老套路了,对一个数来说,每次取模至少让它减少一半,这样每次单点修改对时间复杂度的贡献就是一个log" role="presen ...
随机推荐
- 如何用JavaScript做一个可拖动的div层
可拖动的层在Web设计中用处很多,比如在某些需要自定义风格布局的应用中,控件就需要拖动操作,下面介绍一个,希望可以满足你的需求,顺便学习一下可拖动的层是如何实现的. 下面是效果演示: 这个DIV可以移 ...
- 2016广东工业大学校赛 E题 GDUT-oj1173
Problem E: 积木积水 Description 现有一堆边长为1的已经放置好的积木,小明(对的,你没看错,的确是陪伴我们成长的那个小明)想知道当下雨天来时会有多少积水.小明又是如此地喜欢二次元 ...
- bzoj 4237 稻草人 CDQ
稻草人 Time Limit: 40 Sec Memory Limit: 256 MBSubmit: 1433 Solved: 626[Submit][Status][Discuss] Descr ...
- 马上给Meltdown和Spectre漏洞打补丁
元旦之后的第一个工作日可谓是惊喜不断,4号就传来了 Google Project Zero 等团队和个人报告的 Meltdown 和 Spectre 内核漏洞的消息,首先简单介绍一下这两个内核漏洞. ...
- SpringMVC学习 -- @RequestParam , @RequestHeader , @CookieValue 的使用
使用 @RequestParam 绑定请求参数值: value:参数名 , 仅有一个 value 属性时 , value 可以省略不写. required:是否必须.默认为 true , 表示请求参数 ...
- es6+最佳入门实践(13)
13.模块化 13.1.什么是模块化 模块化是一种处理复杂系统分解为更好的可管理模块的方式.通俗的讲就是把一个复杂的功能拆分成多个小功能,并且以一种良好的机制管理起来,这样就可以认为是模块化.就像作家 ...
- Nginx反向代理丢失cookie的问题
今天在测试环境进行测试时发现有个页面无论如何都进不去了,经过调试发现,JSESSIONID的path和我访问应用的工程不相同!我访问的应用是/xxx/,而JSESSIONID的path是/yyy/,这 ...
- 「6月雅礼集训 2017 Day2」B
[题目大意] 求n*n的棋盘,每行每列都有2个黑格子的方案数. n<=10^7 [题解] zzq的做法好神奇啊 行列建点,二分图 左边有i个点,右边有j个点的方案数 f[i,j] 左边有i个点, ...
- COGS2642 / Bzoj4590 [Shoi2015]自动刷题机
Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 906 Solved: 321 Description 曾经发明了信号增幅仪的发明家SHTSC又公开了 ...
- javascript的阻塞机制
javascript的阻塞机制 浏览器在执行javascript代码时,不能同时做其它事情,当遇到javascript时,浏览器会下载js文件,解析并执行该文件,而在这期间页面的渲染是完全被阻塞的,因 ...
.
.