/*
只有在区间中的数字不相同时才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线段树区间更新的更多相关文章

  1. HDU4578 线段树(区间更新 + 多种操作)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4578  , 线段树的区间更新 + 多种操作,好题. 虽然是比较裸的线段树,但是比较麻烦,并且有很多细节 ...

  2. HDU4578 线段树(区间更新 + 多种操作)和平方,立方

    参考:https://www.cnblogs.com/H-Vking/p/4297973.html 题意: 虽然是比较裸的线段树,但是比较麻烦,并且有很多细节需要考虑,对着别人的ac代码debug了一 ...

  3. HDU 1556 Color the ball(线段树区间更新)

    Color the ball 我真的该认真的复习一下以前没懂的知识了,今天看了一下线段树,以前只会用模板,现在看懂了之后,发现还有这么多巧妙的地方,好厉害啊 所以就应该尽量搞懂 弄明白每个知识点 [题 ...

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

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

  5. HDU 5023 A Corrupt Mayor's Performance Art(线段树区间更新)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5023 解题报告:一面墙长度为n,有N个单元,每个单元编号从1到n,墙的初始的颜色是2,一共有30种颜色 ...

  6. HDU 4902 Nice boat 2014杭电多校训练赛第四场F题(线段树区间更新)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4902 解题报告:输入一个序列,然后有q次操作,操作有两种,第一种是把区间 (l,r) 变成x,第二种是 ...

  7. HDU 1698 线段树 区间更新求和

    一开始这条链子全都是1 #include<stdio.h> #include<string.h> #include<algorithm> #include<m ...

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

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

  9. ZOJ 1610 Count the Colors (线段树区间更新)

    题目链接 题意 : 一根木棍,长8000,然后分别在不同的区间涂上不同的颜色,问你最后能够看到多少颜色,然后每个颜色有多少段,颜色大小从头到尾输出. 思路 :线段树区间更新一下,然后标记一下,最后从头 ...

随机推荐

  1. springboot-24-restTemplate的使用

    项目中使用的是HttpClient, 后来改成springboot, 偶然间发现restTemplate { "Author": "tomcat and jerry&qu ...

  2. UML类关系(依赖,关联,聚合,组合,泛化,实现)

    转自https://blog.csdn.net/k346k346/article/details/59582926   在学习面向对象设计时,类关系涉及依赖.关联.聚合.组合和泛化这五种关系,耦合度依 ...

  3. 仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'Address'中的标识列指

    在有自增长的SQL表格里面插入指定ID的数据的时候,会禁止你操作,提示如题目,解决办法: set identity_insert address on ,,,) set identity_insert ...

  4. SQL记录-解锁和dbms_job操作

    创建JOB create or replace procedure proc_auto_exec_job as begin declare job number; BEGIN dbms_job.sub ...

  5. SparkSQL和DataFrame

    SparkSQL和DataFrame SparkSQL简介 Spark SQL是Spark用来处理结构化数据的一个模块,它提供了一个编程抽象叫做DataFrame并且作为分布式SQL查询引擎的作用.它 ...

  6. idea 插件的使用 进阶篇(个人收集使用中的)

    idea 插件的使用 进阶篇(个人收集使用中的) 恭喜你,如果你已经看到这篇文章,证明在idear使用上已经初有小成!那么就要向着大神进发了! 下边就是大神之路! 插件的设置 在 IntelliJ I ...

  7. Java编程思想 学习笔记6

    六.访问权限控制 访问控制(或隐藏具体实现)与“最初的实现并不恰当”有关. 如何把变动的事物与保持不变的事物区分开来,这是面向对象设计中的一个基本问题. 为了解决这一问题,Java提供了访问权限修饰词 ...

  8. iOS safari 苹果手机如何阻止页面弹性“橡皮筋效果”?

    苹果上这个上下弹的效果对于有固定导航的页面,体验很不好 知乎上搜到一个并不是完美方案:https://www.zhihu.com/question/22256539 完美方案是有个国外插件叫:prev ...

  9. QWidget窗口类

    import sys from PyQt5.QtWidgets import QWidget, QApplication,QPushButton from PyQt5.QtGui import QIc ...

  10. cocos2d-x 2.1.4 项目配置过程

    http://cocos2d-x.org 下载cocos2d-x 2.1.4 使用project-creator.py脚本创建Cocos2d-win32 Application项目 1.先下载Wind ...