/*
只有在区间中的数字不相同时才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&#39;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&#39;s posters (线段树区间更新+离散化)
题目分析:线段树区间更新+离散化 代码如下: # include<iostream> # include<cstdio> # include<queue> # in ...
-
ZOJ 1610 Count the Colors (线段树区间更新)
题目链接 题意 : 一根木棍,长8000,然后分别在不同的区间涂上不同的颜色,问你最后能够看到多少颜色,然后每个颜色有多少段,颜色大小从头到尾输出. 思路 :线段树区间更新一下,然后标记一下,最后从头 ...
随机推荐
-
为什么需要在TypedArray后调用recycle
当我们没有在使用TypedArray后调用recycle,编译器会提示“This TypedArray should be recycled after use with #recycle()”. 官 ...
-
snmp getTable demo :iftable ipAddresstable
package org.huangxf.snmp.test; import java.io.IOException; import java.util.List; import org.snmp4j. ...
-
power designer 连接数据库提示“connection test failed”
利用powerdesigner反向生成表结构时,需要mysql连接,配置好连接,测试时直接报:connection test failed”! OS:WIN7 旗舰版 64位 JDK: 64位 Pow ...
-
easyui datagrid显示进度条控制操作
在当我们需要控制时间前台实际项目页面datagrid显示进度条的数据加载时运行,和datagrid默认情况下只在有url加载运行时的数据显示方式的进度条.下面的代码手动控制: 打开一个进度条: $(' ...
-
$_GET
POST GET ,是提交表单的两种方式,GET传值就用$_GET获取,POST提交表单就用$_POSTpost与get的区别是一个在地址栏显示参数,另一个不显示 如果地址是这样:http://zhi ...
-
MapReduce-TextInputFormat 切片机制
MapReduce 默认使用 TextInputFormat 进行切片,其机制如下 (1)简单地按照文件的内容长度进行切片 (2)切片大小,默认等于Block大小,可单独设置 (3)切片时不考虑数据集 ...
-
HDOJ-2039
#include<iostream> #include<cstdio> using namespace std; int main(){ int m,flag; float x ...
-
Hadoop项目实战-用户行为分析之编码实践
1.概述 本课程的视频教程地址:<用户行为分析之编码实践> 本课程以用户行为分析案例为基础,带着大家去完成对各个KPI的编码工作,以及应用调度工作,让大家通过本课程掌握Hadoop项目的编 ...
-
php编写TCP服务端和客户端程序
1.修改php.ini,打开extension=php_sockets.dll 2.服务端程序SocketServer.php <?php //确保在连接客户端时不会超时 set_time_li ...
-
Solr --- Group查询与Facet区别
简介 facet的查询结果主要是分组信息:有什么分组,每个分组包括多少记录:但是分组中有哪些数据是不可知道的,只有进一步搜索. group则类似于关系数据库的group by,可以用于一个或者几个字段 ...