Sample Input
5 5
3 3 5 7
1 2 4 4
4 1 5 2
2 2 5 8
4 3 5 3
0 0

Sample Output

307
7489 题意:
给出n,m,表示该数有n个节点,m次操作。
接下来m次操作,op、x、y、z,
op=1时,将区间内每个元素+z
op=2时,将区间内每个元素*z
op=3时,将区间内每个元素都变成z
op=4时,求出区间内每个元素的p次方之和输出且对mod10007取余。 数组说明:
a[i]:该区间相等元素值
book[i]: 假设该节点下面的儿子节点全部相等则标记为0,否则为1

对于op=4时的次方操作:
if(L<=l&&r<=R&&book[i]==)
{
ll ans=;
for(int k=; k<p; k++)
ans=(ans*a[i])%mod;
ans=(ans*(r-l+))%mod;
return ans;
}


 #include<stdio.h>
#include<map>
#include<iostream>
#include<string.h>
#include<algorithm>
#include<stack>
#include<cmath>
#include<vector>
using namespace std;
typedef long long ll;
const int mod=;
const int N=1e5+; int a[*N];
bool book[*N]; void pushdown(int i)
{
if(book[i<<]||book[i<<|])
book[i]=;
else if(a[i<<]!=a[i<<|])
book[i]=;
else
{
book[i]=;
a[i]=a[i<<]=a[i<<|];//因为a[i<<1]==a[i<<1|1]
}
}
//1 x y 1 n
void update(int i,int L,int R,int l,int r,int z,int op)
{
if(L<=l&&r<=R&&book[i]==)//1不相等 0相等
{
if(op==)
a[i]=(a[i]+z)%mod;
else if(op==)
a[i]=(a[i]*z)%mod;
else if(op==)
a[i]=z;
return;
}
if(book[i]==)
{
book[i<<]=book[i<<|]=;
a[i<<]=a[i<<|]=a[i];
book[i]=;
}
int mid=(l+r)>>;
if(L<=mid)
update(i<<,L,R,l,mid,z,op);
if(R>mid)
update(i<<|,L,R,mid+,r,z,op);
pushdown(i);//a[i]=a[i<<1]+a[i<<1|1];
} ll query(int i,int L,int R,int l,int r,int p)
{
if(L<=l&&r<=R&&book[i]==)
{
ll ans=;
for(int k=;k<p;k++)
ans=(ans*a[i])%mod;
ans=(ans*(r-l+))%mod;
return ans;
}
if(book[i]==)
{
book[i<<]=book[i<<|]=;
a[i<<]=a[i<<|]=a[i];
book[i]=;
}
int mid=(l+r)>>;
ll ans=;
if(L<=mid)
ans+=query(i<<,L,R,l,mid,p);
if(R>mid)
ans+=query(i<<|,L,R,mid+,r,p);
return ans%mod; } int main()
{
int n,m,op,L,R,z;
while(cin>>n>>m)
{
if(n==&&m==)
break;
memset(book,,sizeof(book));//假设全相等标记为0//book[1]表示该节点下面的元素不相等
memset(a,,sizeof(a));//该区间相等元素值
for(int i=; i<m; i++)
{
cin>>op>>L>>R>>z;
if(op!=) //1+,2*,3变为z,
update(,L,R,,n,z,op);
else //*z次方
{
ll ans=query(,L,R,,n,z)%mod;
printf("%lld\n",ans);
}
}
}
return ;
}

 

 

HDU4578-Transformation-线段树的加、乘、变、次方操作的更多相关文章

  1. HDU4578 Transformation 线段树

    这个题让我重新学习了加 乘 在区间的操作 题解:http://blog.csdn.net/guognib/article/details/25324025?utm_source=tuicool& ...

  2. 【CF52C】Circular RMQ(线段树区间加减,区间最值)

    给定一个循环数组a0, a1, a2, …, an-1,现在对他们有两个操作: Inc(le, ri, v):表示区间[le, ri]范围的数值增加v Rmq(le, ri):表示询问区间[le, r ...

  3. hdu 4578 Transformation 线段树多种操作裸题

    自己写了一个带结构体的WA了7.8次 但是测了几组小数据都对..感觉问题应该出在模运算那里.写完这波题解去对拍一下. 以后线段树绝不写struct!一般的struct都带上l,r 但是一条线段的长度确 ...

  4. vijos 1659 河蟹王国 线段树区间加、区间查询最大值

    河蟹王国 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 https://vijos.org/p/1659 Description 河蟹王国有一位河蟹国王,他 ...

  5. 30-Transformation(HDU4578)-区间线段树(复杂)

    http://acm.hdu.edu.cn/showproblem.php?pid=4578 Transformation Time Limit: 15000/8000 MS (Java/Others ...

  6. poj 3468 A Simple Problem with Integers 线段树区间加,区间查询和

    A Simple Problem with Integers Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://poj.org/problem?i ...

  7. poj 3468 A Simple Problem with Integers 线段树区间加,区间查询和(模板)

    A Simple Problem with Integers Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://poj.org/problem?i ...

  8. Transformation 线段树好题 好题 (独立写出来对线段树不容易)

    Transformation Time Limit: 15000/8000 MS (Java/Others)    Memory Limit: 65535/65536 K (Java/Others)T ...

  9. 线段树 区间加 gcd 差分 小阳的贝壳

    小阳的贝壳 如果线段树要维护区间gcd 这个很简单,但是如果有了区间加,维护gcd 就比较麻烦了. 这个首先可以证明的是 gcd(x,y,z)=gcd(x,y-x,z-y)   这个可以推到 n 个 ...

  10. HDU 4578 Transformation --线段树,好题

    题意: 给一个序列,初始全为0,然后有4种操作: 1. 给区间[L,R]所有值+c 2.给区间[L,R]所有值乘c 3.设置区间[L,R]所有值为c 4.查询[L,R]的p次方和(1<=p< ...

随机推荐

  1. 【Web API]无法添加AttributeRoutes的解决方案

    1.按照微软官方文档,如果要使用AttributeRoutes,需要在APP_START里的WebApiConfig.cs的Register方法中添加一行:config.MapHttpAttribut ...

  2. FileInputStream_FileOutputStream

    Writer的基本方法 //向输出流中写入一个字符数据,该字节数据为参数b的低16位 void write(int c) throws IOException //将一个字符类型的数组中的数据写入输出 ...

  3. 创建调用Consul的客户端项目

    创建调用Consul的客户端项目 创建项目 源码 Github仓库:https://github.com/sunweisheng/spring-cloud-example

  4. Timus 1712. Cipher Grille 题解

    版权声明:本文作者靖心,靖空间地址:http://blog.csdn.net/kenden23/.未经本作者同意不得转载. https://blog.csdn.net/kenden23/article ...

  5. Java 编写过滤手机号码或者固定电话的工具类

    以下是分享自己编写的用于过滤手机号码.固定电话.黑名单的工具类TelCheckUtils, import java.util.HashSet; import java.util.Set; import ...

  6. saltstack基本操作第一篇章

    一.安装saltstack 1)官网安装 http://repo.saltstack.com/#rhel saltstack的模块:   https://www.unixhot.com/docs/sa ...

  7. 自定义 MessageBox 组件

    效果: 公共组件页面: js部分: <script>   export default {     props: {       title: {         type: String ...

  8. Nginx+Keepalived主从配置(双机主从热备)+Tomcat集群

    拓扑环境 以下表格是这次測试须要的拓扑环境,几台server.每台server上安装什么,都有介绍. server名称 系统版本号 预装软件 IP地址/VIP Nginx主server CentOS ...

  9. [几何]计算不规则多边形的面积、中心、重心(Android,转)

    转自:[几何]计算不规则多边形的面积.中心.重心 最近项目用到:在不规则多边形的中心点加一个图标.(e.g: xx地区发生暴雪,暴雪区域是多边形,给多边形中心加一个暴雪的图标) 之前的设计是,计算不规 ...

  10. Django Rest框架 流程详解

    什么是Restful REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移” REST从资源的角度类审 ...