1.

hdu1698

http://acm.hdu.edu.cn/showproblem.php?pid=1698

 /*
x y k
x~y的值变为k
*/
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <time.h>
#include <string>
#include <set>
#include <map>
#include <list>
#include <stack>
#include <queue>
#include <vector>
#include <bitset>
#include <ext/rope>
#include <algorithm>
#include <iostream>
using namespace std;
#define ll long long
#define minv 1e-6
#define inf 1e9
#define pi 3.1415926536
#define E 2.7182818284
const ll mod=1e9+;//
const int maxn=1e5+; int tag[maxn<<],sum[maxn<<]; void push_down(int index,int len)
{
tag[index<<]=tag[index<<|]=tag[index];
sum[index<<]=((len+)>>)*tag[index];
sum[index<<|]=(len>>)*tag[index];
tag[index]=;
} void build(int index,int l,int r)
{
tag[index]=;
if (l==r)
sum[index]=;
else
{
int m=(l+r)>>;
build(index<<,l,m);
build(index<<|,m+,r);
sum[index]=sum[index<<]+sum[index<<|];
}
} void update(int index,int l,int r,int x,int y,int k)
{
if (x<=l && r<=y)
{
tag[index]=k;
sum[index]=(r-l+)*k;
return;
}
if (tag[index]!=)
push_down(index,r-l+);
int m=(l+r)>>;
if (x<=m)
update(index<<,l,m,x,y,k);
if (m<y)
update(index<<|,m+,r,x,y,k);
sum[index]=sum[index<<]+sum[index<<|];
} int query(int index,int l,int r,int s,int t)
{
if (s<=l && r<=t)
return sum[index];
if (r<s || l>t)
return ;
if (tag[index]!=)
push_down(index,r-l+);
int m=(l+r)>>;
return query(index<<,l,m,s,t)+query(index<<|,m+,r,s,t);
} int main()
{
int t,T,n,q,x,y,k;
scanf("%d",&t);
for (T=;T<=t;T++)
{
scanf("%d",&n);
build(,,n);
scanf("%d",&q);
while (q--)
{
scanf("%d%d%d",&x,&y,&k);
update(,,n,x,y,k);
}
printf("Case %d: The total value of the hook is %d.\n",T,query(,,n,,n));
}
return ;
}

2.

https://www.luogu.org/problemnew/show/P3372

不用取余

 /*

 操作1: 格式:1 x y k 含义:将区间[x,y]内每个数加上k

 操作2: 格式:2 x y 含义:输出区间[x,y]内每个数的和
*/
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <time.h>
#include <string>
#include <set>
#include <map>
#include <list>
#include <stack>
#include <queue>
#include <vector>
#include <bitset>
#include <ext/rope>
#include <algorithm>
#include <iostream>
using namespace std;
#define ll long long
#define minv 1e-6
#define inf 1e9
#define pi 3.1415926536
#define E 2.7182818284
const ll mod=1e9+;//
const int maxn=1e5+; ll sum[maxn<<],tag[maxn<<]; void build(int index,int l,int r)
{
tag[index]=;
if (l==r)
{
scanf("%lld",&sum[index]);
sum[index]=sum[index];
}
else
{
int m=(l+r)>>;
build(index<<,l,m);
build(index<<|,m+,r);
sum[index]=sum[index<<]+sum[index<<|];
}
} void pushdown(int index,ll len)
{
sum[index<<]=tag[index]*((len+)>>) +sum[index<<];
sum[index<<|]=tag[index]*(len>>) +sum[index<<|];
tag[index<<]=tag[index]+ tag[index<<];
tag[index<<|]=tag[index]+ tag[index<<|];
tag[index]=;
} void update(int index,int l,int r,int x,int y,ll k)
{
if (x<=l && r<=y)
{
sum[index]=k*(r-l+) +sum[index];
tag[index]=k +tag[index];
return;
}
int m=(l+r)>>;
if (tag[index]!=)
pushdown(index,r-l+);
if (x<=m)
update(index<<,l,m,x,y,k);
if (m<y)
update(index<<|,m+,r,x,y,k);
sum[index]=sum[index<<]+sum[index<<|];
} ll query(int index,int l,int r,int x,int y)
{
if (x<=l && r<=y)
return sum[index];
if (r<x || l>y)
return ;
if (tag[index]!=)
pushdown(index,r-l+);
int m=(l+r)>>;
return query(index<<,l,m,x,y)+query(index<<|,m+,r,x,y);
} int main()
{
int n,m,mode,x,y;
ll k;
scanf("%d%d",&n,&m);
build(,,n);
while (m--)
{
scanf("%d",&mode);
if (mode==)
{
scanf("%d%d%lld",&x,&y,&k);
update(,,n,x,y,k);
}
else
{
scanf("%d%d",&x,&y);
printf("%lld\n",query(,,n,x,y));
}
}
return ;
}
/*
10
463 793 740 374 330 772 681
5 8 39
5 8
3 6 3
5 8 90
1 5 21
3 8
3 8 17
4 7 52
2 6
2 7 41
5
2 3 4 5
1 3 -1
1 3 1
2 4
100
2 3 4 5 6 7 8 9 10
1 10
2 7 1
1 10
3 8 */

3.

https://www.luogu.org/problemnew/show/P3373

 /*
1.将某区间每一个数乘上x 2.将某区间每一个数加上x 3.求出某区间每一个数的和
*/
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <time.h>
#include <string>
#include <set>
#include <map>
#include <list>
#include <stack>
#include <queue>
#include <vector>
#include <bitset>
#include <ext/rope>
#include <algorithm>
#include <iostream>
using namespace std;
#define ll long long
#define minv 1e-6
#define inf 1e9
#define pi 3.1415926536
#define E 2.7182818284
//const ll mod=1e9+7;//
const int maxn=1e5+; ll mod;
ll add[maxn<<],mul[maxn<<],sum[maxn<<];
int mode; void build(int index,int l,int r)
{
add[index]=;
mul[index]=;
if (l==r)
{
scanf("%lld",&sum[index]);
sum[index]=sum[index]%mod;
}
else
{
int m=(l+r)>>;
build(index<<,l,m);
build(index<<|,m+,r);
sum[index]=(sum[index<<]+sum[index<<|])%mod;
}
} void pushdown(int index,ll len)
{
//(x *y+z)*s+t = x*(ys) + z*s+t
add[index<<]=(add[index<<]*mul[index]+add[index])%mod;
mul[index<<]=mul[index]*mul[index<<]%mod;
sum[index<<]=(sum[index<<]*mul[index]+add[index]*((len+)>>))%mod; add[index<<|]=(add[index<<|]*mul[index]+add[index])%mod;
mul[index<<|]=mul[index]*mul[index<<|]%mod;
sum[index<<|]=(sum[index<<|]*mul[index]+add[index]*(len>>))%mod; add[index]=;
mul[index]=;
} void update(int index,int l,int r,int x,int y,ll k)
{
if (x<=l && r<=y)
{
if (mode==)
{
//(x*y+z)*k
sum[index]=sum[index]*k%mod;
add[index]=add[index]*k%mod;
mul[index]=mul[index]*k%mod;
}
else
{
//(x*y+z)+k
sum[index]=(sum[index]+k*(r-l+))%mod;
add[index]=(add[index]+k)%mod;
}
return;
}
pushdown(index,r-l+);
int m=(l+r)>>;
if (x<=m)
update(index<<,l,m,x,y,k);
if (m<y)
update(index<<|,m+,r,x,y,k);
sum[index]=(sum[index<<]+sum[index<<|])%mod;
} ll query(int index,int l,int r,int x,int y)
{
if (x<=l && r<=y)
return sum[index];
if (x>r || y<l)
return ;
pushdown(index,r-l+);
int m=(l+r)>>;
return (query(index<<,l,m,x,y)+query(index<<|,m+,r,x,y))%mod;
} int main()
{
int n,q,x,y;
ll k;
scanf("%d%d%lld",&n,&q,&mod);
build(,,n);
while (q--)
{
scanf("%d%d%d",&mode,&x,&y);
if (mode!=)
{
scanf("%lld",&k);
update(,,n,x,y,k%mod);
}
else
printf("%lld\n",query(,,n,x,y));
}
return ;
}
/*
5 100 1000000
1 2 3 4 5
1 1 5 2
2 1 5 3
3 1 3 */

线段树区间更新 lazy的更多相关文章

  1. “盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛题解&&源码【A,水,B,水,C,水,D,快速幂,E,优先队列,F,暴力,G,贪心+排序,H,STL乱搞,I,尼姆博弈,J,差分dp,K,二分+排序,L,矩阵快速幂,M,线段树区间更新+Lazy思想,N,超级快速幂+扩展欧里几德,O,BFS】

    黑白图像直方图 发布时间: 2017年7月9日 18:30   最后更新: 2017年7月10日 21:08   时间限制: 1000ms   内存限制: 128M 描述 在一个矩形的灰度图像上,每个 ...

  2. codevs 1690 开关灯 线段树区间更新 区间查询Lazy

    题目描述 Description YYX家门前的街上有N(2<=N<=100000)盏路灯,在晚上六点之前,这些路灯全是关着的,六点之后,会有M(2<=m<=100000)个人 ...

  3. poj 3468 A Simple Problem with Integers (线段树区间更新求和lazy思想)

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 75541   ...

  4. hihoCoder 1080 : 更为复杂的买卖房屋姿势 线段树区间更新

    #1080 : 更为复杂的买卖房屋姿势 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho都是游戏迷,“模拟都市”是他们非常喜欢的一个游戏,在这个游戏里面他们 ...

  5. POJ-2528 Mayor's posters (线段树区间更新+离散化)

    题目分析:线段树区间更新+离散化 代码如下: # include<iostream> # include<cstdio> # include<queue> # in ...

  6. HDU5039--Hilarity DFS序+线段树区间更新 14年北京网络赛

    题意:n个点的树,每个条边权值为0或者1, q次操作 Q 路径边权抑或和为1的点对数, (u, v)(v, u)算2个. M i修改第i条边的权值 如果是0则变成1, 否则变成0 作法: 我们可以求出 ...

  7. hihoCoder #1078 : 线段树的区间修改(线段树区间更新板子题)

    #1078 : 线段树的区间修改 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 对于小Ho表现出的对线段树的理解,小Hi表示挺满意的,但是满意就够了么?于是小Hi将问题 ...

  8. poj3468 A Simple Problem with Integers(线段树区间更新)

    https://vjudge.net/problem/POJ-3468 线段树区间更新(lazy数组)模板题 #include<iostream> #include<cstdio&g ...

  9. hdu 3966(树链剖分+线段树区间更新)

    传送门:Problem 3966 https://www.cnblogs.com/violet-acmer/p/9711441.html 学习资料: [1]线段树区间更新:https://blog.c ...

随机推荐

  1. POJ2488&&3083&&3009&&1321&&2251&&2049

    刷完了大力数据结构(水比数据结构专题)后又开始搞无脑搜索专题了 这次的标签是DFS(这TM的到现在了谁还不会) 2488 跳马问题:给出一个棋盘,让你求一个方案使一匹马能花最短的时间不重复不遗漏地跳完 ...

  2. Ansible入门笔记(1)之工作架构和使用原理

    目录 Ansible入门笔记(1) 1.Ansible特性 2.ansible架构解析 3.ansible主要组成部分 1)命令执行来源: 2)利用ansible实现管理的方式 3)Ansile-pl ...

  3. HDU 6333 Harvest of Apples (分块、数论)

    题目连接:Harvest of Apples 题意:给出一个n和m,求C(0,n)+C(1,n)+.....+C(m,n).(样例组数为1e5) 题解:首先先把阶乘和逆元预处理出来,这样就可O(1)将 ...

  4. [SDOI2010]地精部落[计数dp]

    题意 求有多少长度为 \(n\) 的排列满足 \(a_1< a_2> a_3 < a_4 \cdots\) 或者 $a_1> a_2 < a_3 > a_4\cdo ...

  5. JDBC详解系列(一)之流程

    ---[来自我的CSDN博客](http://blog.csdn.net/weixin_37139197/article/details/78838091)--- JDBC概述   使用JDBC也挺长 ...

  6. VirtualBox虚拟机怎么导入已经存在的vdi文件

    VirtualBox虚拟机怎么导入已经存在的vdi文件 第一章 1.原因 早上一不小心将virtualBox 卸载了,(不知道怎么了, 里面得虚拟机全部都没有了,但是vdi文件还在) 2.解决办法 直 ...

  7. 使用Memcached提高.NET应用程序的性能(转)

    标签:分布式缓存 .NET Memcached Performance 性能 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://zh ...

  8. nodejs安装及npm模块插件安装路径配置

    在学习完js后,我们就要进入nodejs的学习,因此就必须配置nodejs和npm的属性了. 我相信,个别人在安装时会遇到这样那样的问题,看着同学都已装好,难免会焦虑起来.于是就开始上网查找解决方案, ...

  9. npm安装时一些错误

    1. npm install 提示no such file or directory 缺少package.json 首先初始化, npm init -f 然后安装依赖 npm install form ...

  10. Linux内核分析第二周总结

    计算机是如何工作的? 计算机的"三大法宝": 存储程序计算机 函数调用堆栈 中断机制 堆栈是计算机运行高级语言的基础 函数调用堆栈: 32位X86通过函数调用堆栈来传递参数 使用e ...