kb-07线段树--11--区间多重该值多种查询
/*
lazy思想的运用,因为查询多种,如果全记录就太繁了,lazy就是如果该区间的每一个叶子的状态都相同就不用深入下去该值,只要暂时标记下,查询的时候也不用下去,直接计算; */
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define MAX_N 100005
#define mod 10007
#define ll long long
using namespace std;
struct tree
{
ll l,r,la[];
ll same,s;//s表示该区间的值都是s;
}tr[MAX_N*];
ll ans=;
void build(int rt,int l,int r)
{
tr[rt].l=l;
tr[rt].r=r;
tr[rt].same=;
tr[rt].s=;
memset(tr[rt].la,,sizeof(tr[rt].la));
tr[rt].la[]=;
if(l==r)
return ;
int mid=(l+r)/;
build(rt<<,l,mid);
build(rt<<|,mid+,r);
}
void Pushdown(int rt)
{
if(tr[rt].same==)
{
int L=rt<<,R=rt<<|;
tr[L].la[]+=tr[rt].la[];
tr[L].la[]*=tr[rt].la[];
tr[L].la[]=tr[rt].la[];
tr[L].s=tr[R].s=tr[rt].s;
tr[R].la[]+=tr[rt].la[];
tr[R].la[]*=tr[rt].la[];
tr[R].la[]=tr[rt].la[];
tr[L].same=tr[R].same=;
tr[rt].la[]=;
tr[rt].la[]=;
tr[rt].la[]=;
tr[rt].same=;
}
return;
}
void Update(int rt,int l,int r,int x,int t)
{
if(t==)
{
if(tr[rt].l==l&&tr[rt].r==r&&tr[rt].same==)
{
tr[rt].la[]+=x;//关键;
tr[rt].la[]%=mod;
tr[rt].s=tr[rt].s+x;
return ;
}
}
else if(t==)
{
if(tr[rt].l==l&&tr[rt].r==r&&tr[rt].same==)
{
tr[rt].la[]*=x;
tr[rt].la[]%=mod;
tr[rt].s=tr[rt].s*x%mod;
return ;
}
}
else
{
if(tr[rt].l==l&&tr[rt].r==r)
{
tr[rt].la[]=x;
tr[rt].s=x;
tr[rt].same=;
return;
}
}
if(tr[rt].same==)
Pushdown(rt);
int L=rt<<,R=rt<<|;
if(l<=tr[L].r)
{
if(r<=tr[L].r)
Update(L,l,r,x,t);
else
Update(L,l,tr[L].r,x,t);
}
if(r>=tr[R].l)
{
if(l>=tr[R].l)
Update(R,l,r,x,t);
else
Update(R,tr[R].l,r,x,t);
}
}
void Query(int rt,int l,int r,int x)
{
if(tr[rt].l==l&&tr[rt].r==r&&tr[rt].same==)
{
ll n=r-l+,temp=;
for(int i=;i<=x;i++)
{
temp*=tr[rt].s%mod;
temp%=mod;
}
ans+=(temp*n%mod)%mod;
return ;
}
if(tr[rt].same==)
Pushdown(rt);
int L=rt<<,R=rt<<|;
if(l<=tr[L].r)
{
if(r<=tr[L].r)
Query(L,l,r,x);
else
Query(L,l,tr[L].r,x);
}
if(r>=tr[R].l)
{
if(l>=tr[R].l)
Query(R,l,r,x);
else
Query(R,tr[R].l,r,x);
}
}
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF&&(n||m))
{
memset(tr,,sizeof(tr));
build(,,n);
for(int i=;i<m;i++)
{
int x,y,ty,c;
scanf("%d%d%d%d",&ty,&x,&y,&c);
if(ty==)
{
ans=;
Query(,x,y,c);
cout<<ans%mod<<endl;
}
else
{
Update(,x,y,c,ty);
} }
}
return ;
}
kb-07线段树--11--区间多重该值多种查询的更多相关文章
- FJUT3568 中二病也要敲代码(线段树维护区间连续最值)题解
题意:有一个环,有1~N编号,m次操作,将a位置的值改为b,问你这个环当前最小连续和多少(不能全取也不能不取) 思路:用线段树维护一个区间最值连续和.我们设出两个变量Lmin,Rmin,Mmin表示区 ...
- 刷题向》关于线段树的区间开根号 BZOJ3211(NORMAL+)
这是一道关于线段树的区间开根号的裸题,没什么好讲的. 值得注意的是,因为有区间开根号的性质,所以我们每一次更改操作只能把更改区间所覆盖的所有元素全部查找,当然你直接找效率明显爆炸... 能够注意到,指 ...
- ZOJ 2301 Color the Ball 线段树(区间更新+离散化)
Color the Ball Time Limit: 2 Seconds Memory Limit: 65536 KB There are infinite balls in a line ...
- poj 3468:A Simple Problem with Integers(线段树,区间修改求和)
A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 58269 ...
- zoj3686(线段树的区间更新)
对线段树的区间更新有了初步的了解... A Simple Tree Problem Time Limit: 3 Seconds Memory Limit: 65536 KB Given a ...
- Codeforces Round #222 (Div. 1) D. Developing Game 线段树有效区间合并
D. Developing Game Pavel is going to make a game of his dream. However, he knows that he can't mak ...
- hiho一下20周 线段树的区间修改
线段树的区间修改 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 对于小Ho表现出的对线段树的理解,小Hi表示挺满意的,但是满意就够了么?于是小Hi将问题改了改,又出给了 ...
- 2016年湖南省第十二届大学生计算机程序设计竞赛---Parenthesis(线段树求区间最值)
原题链接 http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1809 Description Bobo has a balanced parenthes ...
- hdu 1556:Color the ball(线段树,区间更新,经典题)
Color the ball Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
随机推荐
- duboo 配置文件
官方文档 http://dubbo.apache.org/en-us/docs/user/quick-start.html 自己的 <?xml version="1.0" e ...
- Mycat实现读写分离、分库分表
系统开发中,数据库是非常重要的一个点.除了程序的本身的优化,如:SQL语句优化.代码优化,数据库的处理本身优化也是非常重要的.主从.热备.分表分库等都是系统发展迟早会遇到的技术问题问题.Mycat是一 ...
- eubacteria|endosymbiosis|基因转移
5.11线粒体和叶绿体是通过内共生进化而来的 初始细胞俘获有功能的真细菌(eubacteria)进入细胞内,该细菌逐渐演化为细胞器,这种现象称为内共生(endosymbiosis),所以该细胞器携带细 ...
- java基础—GUI编程(一)
一.AWT介绍
- 学习jQuery的免费资源:电子书、视频、教程和博客
jQuery毫无疑问是目前最流行的JavasScript库.排名最前的网站中70%使用了jQuery,并且jQuery也成为了Web开发的标准.如果你想找Web开发方面的工作,了解jQuery会大大的 ...
- CF-1013 (2019/02/09 补)
CF-1013 A. Piles With Stones 比较两个序列的和,因为只能拿走或者不拿,所以总数不能变大. B. And 答案只有 -1,0,1,2几种可能,所以对于每一种答案都暴力扫一次是 ...
- 【NOIP2017提高组模拟7.3】B
树上路径统计,点分治解决. 统计一段区间,naive地用了set解决,这样的复杂度是O(nlog^2n)的 考场代码出了个问题,统计答案时找到了之前的最优答案,但是没有加上新的一段,导致60分 #in ...
- Centos7离线部署kubernetes 1.13集群记录
一.说明 本篇主要参考kubernetes中文社区的一篇部署文章(CentOS 使用二进制部署 Kubernetes 1.13集群),并做了更详细的记录以备用. 二.部署环境 1.kubernetes ...
- mysql锁机制(转载)
锁是计算机协调多个进程或线程并发访问某一资源的机制 .在数据库中,除传统的 计算资源(如CPU.RAM.I/O等)的争用以外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性.有效性是所 ...
- Choose unique values for the 'webAppRootKey' context-param in your web.xml files! 错误的解决
大意是Log4jConfigListener在获取webapp.root值时,被后一context的值替换掉了,所以要在各个项目的web.xml中配置不同的webAppRootKey值,随即在其中一个 ...