在大大推荐下这个标题不明的人做。而我的最后一个非常喜欢的段树,因此,愤怒出手。认为基本上相同。大值,当最大值小于取模时能够剪枝。
今后再遇到此类问题算是能攻克了
// file name: d.cpp //
// author: huangjipeng //
// creat time: 2014年05月26日 星期一 16时40分18秒 //
///////////////////////////////////////////////////////
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<map>
#include<vector>
#include<queue>
using namespace std;
#define MAXN 100005
struct node
{
int l,r;
int mid;
long long maxx;
long long sum;
}tree[MAXN<<2];
void build(int l,int r,int now)
{
tree[now].l=l;
tree[now].r=r;
tree[now].mid=(l+r)>>1;
if(l==r)
{
scanf("%I64d",&tree[now].maxx);
tree[now].sum=tree[now].maxx;
return ;
}
build(l,tree[now].mid,now<<1);
build(tree[now].mid+1,r,now<<1|1);
tree[now].sum=(tree[now<<1].sum+tree[now<<1|1].sum);
tree[now].maxx=max(tree[now<<1].maxx,tree[now<<1|1].maxx);
}
long long query(int l,int r,int now)
{
if(tree[now].l==l && tree[now].r==r)
return tree[now].sum;
if(l>tree[now].mid)
return query(l,r,now<<1|1);
else if(r<=tree[now].mid)
return query(l,r,now<<1);
else
return query(l,tree[now].mid,now<<1)+query(tree[now].mid+1,r,now<<1|1);
}
void update(int l,int r,long long x,int now)
{
if(tree[now].maxx<x)
return ;
if(tree[now].l==tree[now].r)
{
tree[now].sum=tree[now].sum%x;
tree[now].maxx=tree[now].sum;
return ;
}
if(l>tree[now].mid)
update(l,r,x,now<<1|1);
else if(r<=tree[now].mid)
update(l,r,x,now<<1);
else
{
update(l,tree[now].mid,x,now<<1);
update(tree[now].mid+1,r,x,now<<1|1);
}
tree[now].sum=tree[now<<1].sum+tree[now<<1|1].sum;
tree[now].maxx=max(tree[now<<1].maxx,tree[now<<1|1].maxx);
}
void op3(int k,long long x,int now)
{
if(tree[now].l==k && tree[now].r==k)
{
tree[now].maxx=tree[now].sum=x;
return ;
}
if(k>tree[now].mid)
op3(k,x,now<<1|1);
else
op3(k,x,now<<1);
tree[now].sum=(tree[now<<1].sum+tree[now<<1|1].sum);
tree[now].maxx=max(tree[now<<1].maxx,tree[now<<1|1].maxx);
}
int main()
{
int n,m;
cin>>n>>m;
build(1,n,1);
while(m--)
{
int op;
scanf("%d",&op);
if(op==1)
{
int l,r;
scanf("%d%d",&l,&r);
cout<<query(l,r,1)<<endl;
}
else if(op==2)
{
int l,r;
long long x;
scanf("%d%d%I64d",&l,&r,&x);
update(l,r,x,1);
}
else if(op==3)
{
int k;
long long x;
scanf("%d%I64d",&k,&x);
op3(k,x,1);
}
}
return 0;
}

版权声明:本文博主原创文章,博客,未经同意不得转载。

codeforces 438D的更多相关文章

  1. Codeforces 438D (今日gg模拟第二题) | 线段树 考察时间复杂度的计算 -_-|||

    Codeforces 438D The Child and Sequence 给出一个序列,进行如下三种操作: 区间求和 区间每个数模x 单点修改 如果没有第二个操作的话,就是一棵简单的线段树.那么如 ...

  2. 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 ...

  3. Codeforces 438D The Child and Sequence

    题意:给定一个n个数的序列,完成以下3个操作: 1.给定区间求和 2.给定区间对x取模 3.单点修改 对一个数取模,这个数至少折半.于是我们记一个最大值max,如果x>max则不做处理. #in ...

  4. 【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],…, ...

  5. 题解——CodeForces 438D The Child and Sequence

    题面 D. The Child and Sequence time limit per test 4 seconds memory limit per test 256 megabytes input ...

  6. 2018.07.23 codeforces 438D. The Child and Sequence(线段树)

    传送门 线段树维护区间取模,单点修改,区间求和. 这题老套路了,对一个数来说,每次取模至少让它减少一半,这样每次单点修改对时间复杂度的贡献就是一个log" role="presen ...

  7. 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 ...

  8. CodeForces 438D 线段树 剪枝

    D. The Child and Sequence time limit per test 4 seconds memory limit per test 256 megabytes input st ...

  9. CodeForces 438D The Child and Sequence (线段树 暴力)

    传送门 题目大意: 给你一个序列,要求在序列上维护三个操作: 1)区间求和 2)区间取模 3)单点修改 这里的操作二很讨厌,取模必须模到叶子节点上,否则跑出来肯定是错的.没有操作二就是线段树水题了. ...

随机推荐

  1. 设计Mysql索引的原则

    1. 搜索的索引列,不一定是所要选择的列.换句话说,最适合索引的列是出如今WHERE 子句中的列,或连接子句中指定的列,而不是出如今SELECT keyword后的选择列表中的列. 2. 使用惟一索引 ...

  2. onsubmit事件

    var oForm = document.getElementById("form1"); oForm.onsubmit = function(){   alert("你 ...

  3. EmEditor Professional(文本编辑) 下载地址

    http://www.greenxf.com/soft/2126.html  16.1.5 http://www.cr173.com/soft/3031.html    16.3.0

  4. 乐在其中设计模式(C#) - 提供者模式(Provider Pattern)

    原文:乐在其中设计模式(C#) - 提供者模式(Provider Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 提供者模式(Provider Pattern) 作者:weba ...

  5. UVA11294-Wedding(2-SAT)

    option=com_onlinejudge&Itemid=8&page=show_problem&problem=2269">题目链接 题意:有n对夫妻參加一 ...

  6. HDU ACM 1088 Write a simple HTML Browser

    意甲冠军:出现<br>总结,出现<hr>出口'-',今天的字加上各行的假设是长于80然后包,每个字之前,留下一个空白格,为了输出新行结束. #include<iostre ...

  7. Cocos2d-x 单点触摸--让我们用手指动起来的精灵

    转载请注明出处:http://blog.csdn.net/oyangyufu/article/details/25656673 效果图: CCTouch类装载了触摸点的信息.包含触摸点的横纵坐标值和触 ...

  8. JAVA中类以及成员变量和成员方法的修饰符的总结

    一  类的修饰符 java中的文件结构由大到小为:一个工程,一个工程下可以有许多包,每个包中可以有许多类. 类的修饰符分为         访问权限修饰符          和             ...

  9. 初步swift语言学习笔记6(ARC-自己主动引用计数,内存管理)

    笔者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/31824179 转载请注明出处 假设认为文章对你有所帮助.请通过留言 ...

  10. C# - Abstract Classes

     Abstract classes are closely related to interfaces. They are classes that cannot be instantiated, ...