hdu4578线段树区间更新
/*
只有在区间中的数字不相同时才pushdown:往子区间传递数字再到子区间更新,同时该区间的flag置0
更新完左右子区间后进行pushup,如果左右子区间数字相同,那么把子区间合并,子区间数字置0
*/
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define ll long long
#define mod 10007
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define maxn 200000
int n,q,flag[maxn<<],x[maxn<<]; inline void pushup(int rt){
if(!flag[rt<<] || !flag[rt<<|])
flag[rt]=;
else if(x[rt<<]!=x[rt<<|])
flag[rt]=;
else flag[rt]=,x[rt]=x[rt<<];
}
inline void pushdown(int rt){
if(flag[rt]){
flag[rt<<]=flag[rt<<|]=;
x[rt<<]=x[rt];
x[rt<<|]=x[rt];
flag[rt]=;
}
}
void update(int L,int R,int op,int val,int l,int r,int rt){
if(L<=l && R>=r && flag[rt]){
if(op==)
x[rt]=(x[rt]+val)%mod;
else if(op==) x[rt]=x[rt]*val%mod;
else x[rt]=val;
return;
}
pushdown(rt);
int m=l+r>>;
if(L<=m) update(L,R,op,val,lson);
if(R>m) update(L,R,op,val,rson);
pushup(rt);
}
ll query(int L,int R,int val,int l,int r,int rt){
if(L<=l && R>=r && flag[rt]){
ll ans=;
for(int i=;i<=val;i++)
ans=(ans*x[rt])%mod;
ans=(ans*(r-l+))%mod;
return ans;
}
pushdown(rt);
int m=l+r>>;
ll ans=;
if(L<=m) ans+=query(L,R,val,lson);
if(R>m) ans+=query(L,R,val,rson);
return ans%mod;
}
int main(){
while(scanf("%d%d",&n,&q),n){
memset(flag,,sizeof flag);
memset(x,,sizeof x);
int op,L,R,val;
while(q--){
scanf("%d%d%d%d",&op,&L,&R,&val);
if(op<= && op>=) update(L,R,op,val,,n,);
else printf("%lld\n",query(L,R,val,,n,));
}
}
return ;
}
hdu4578线段树区间更新的更多相关文章
- HDU4578 线段树(区间更新 + 多种操作)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4578 , 线段树的区间更新 + 多种操作,好题. 虽然是比较裸的线段树,但是比较麻烦,并且有很多细节 ...
- HDU4578 线段树(区间更新 + 多种操作)和平方,立方
参考:https://www.cnblogs.com/H-Vking/p/4297973.html 题意: 虽然是比较裸的线段树,但是比较麻烦,并且有很多细节需要考虑,对着别人的ac代码debug了一 ...
- HDU 1556 Color the ball(线段树区间更新)
Color the ball 我真的该认真的复习一下以前没懂的知识了,今天看了一下线段树,以前只会用模板,现在看懂了之后,发现还有这么多巧妙的地方,好厉害啊 所以就应该尽量搞懂 弄明白每个知识点 [题 ...
- hihoCoder 1080 : 更为复杂的买卖房屋姿势 线段树区间更新
#1080 : 更为复杂的买卖房屋姿势 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho都是游戏迷,“模拟都市”是他们非常喜欢的一个游戏,在这个游戏里面他们 ...
- HDU 5023 A Corrupt Mayor's Performance Art(线段树区间更新)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5023 解题报告:一面墙长度为n,有N个单元,每个单元编号从1到n,墙的初始的颜色是2,一共有30种颜色 ...
- HDU 4902 Nice boat 2014杭电多校训练赛第四场F题(线段树区间更新)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4902 解题报告:输入一个序列,然后有q次操作,操作有两种,第一种是把区间 (l,r) 变成x,第二种是 ...
- HDU 1698 线段树 区间更新求和
一开始这条链子全都是1 #include<stdio.h> #include<string.h> #include<algorithm> #include<m ...
- POJ-2528 Mayor's posters (线段树区间更新+离散化)
题目分析:线段树区间更新+离散化 代码如下: # include<iostream> # include<cstdio> # include<queue> # in ...
- ZOJ 1610 Count the Colors (线段树区间更新)
题目链接 题意 : 一根木棍,长8000,然后分别在不同的区间涂上不同的颜色,问你最后能够看到多少颜色,然后每个颜色有多少段,颜色大小从头到尾输出. 思路 :线段树区间更新一下,然后标记一下,最后从头 ...
随机推荐
- scatter
一.matplotlib.pyplot.scatter用来画散点图 import matplotlib.pyplot as plt import matplotlib as mpl mpl.rcPar ...
- GoLang基础数据类型-切片(slice)详解
GoLang基础数据类型-切片(slice)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 数组的长度在定义之后无法再次修改:数组是值类型,每次传递都将产生一份副本.显然这种数 ...
- redis分布式工具类 ----RedisShardedPoolUtil
这个是redis分布式的工具类,看非分布式的看 这里 说一下redis的分布式,分布式,无疑,肯定不是一台redis服务器.假如说,我们有两台redis服务器,一个6379端口,一个6380端口.那 ...
- 正方体旋转demo
接着上一篇博客的内容顺藤摸瓜往下想,既然stage有景深这个概念,可以表达3D场景,那么这个stage就可以呈现立体几何咯,于是自己写了个Cubic Demo 一个正方体有6个面,我们把一个正方体平铺 ...
- spring注解第06课 @Value
1.注入<bean>中的属性 支持3种类型的赋值 <bean id="person" class="com.model.Person"> ...
- Vue Admin - 基于 Vue & Bulma 后台管理面板
Vue Admin 是一个基于 Vue 2.0 & Bulma 0.3 的后台管理面板(管理系统),相当于是 Vue 版本的 Bootstrap 管理系统,提供了一组通用的后台界面 UI 和组 ...
- 集大软件工程15级个人作业Week2
集大软件工程15级个人作业Week2 快速通读教材<构建之法>,并参照提问模板,提出5个问题. 在每个问题后面,请说明哪一章节的什么内容引起了你的提问,提供一些上下文 列出一些事例或资料, ...
- oracle数据库还原以及备份 包括快速备份(并发压缩)
expdp jhpt/XXXX directory=databackup dumpfile=dpfile_201512091300_%U.dmp filesize=5G parallel=8 comp ...
- django错误笔记——TypeError: view must be a callable or a list/tuple in the case of include().解决办法
django增加用户认证模块时,总是提醒模块的url.py中 url(r'^login/$', 'django.contrib.auth.views.login', name='login'),出错: ...
- [JXOI2018]游戏 (线性筛,数论)
[JXOI2018]游戏 \(solution:\) 这一道题的原版题面实在太负能量了,所以用了修改版题面. 这道题只要仔细读题,我们就可以将题目的一些基本性质分析出来:首先我们定义:对于某一类都可以 ...