Transformation
hdu4578:http://acm.hdu.edu.cn/showproblem.php?pid=4578
题意:
给一个序列 {an},有 4 种操作。
1、将一段区间的数全部加 c。
2、将一段区间的数全部乘 c。
3、将一段区间的数全部等于 c。
4、询问一段区间的和(和、平方和、立方和)。
解题思路:
这道题自己完全不会打,虽然知道思路。所以借鉴了大神的代码。
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
const int N = 1e5 + ;
const int mod = ;
#define lson u<<1
#define rson u<<1|1 inline int sqr2(int x){
return x * x % mod;
} inline int sqr3(int x){
return sqr2(x) * x % mod;
} struct SegTree{
int l,r;
int sum[];
int mul,add;
inline int mid(){
return (l+r)>> ;
}
inline int len(){
return r-l+;
}
void flag_init(){
add = , mul = ;
}
void to_mul(int m){
(sum[] *= m) %= mod;
(sum[] *= sqr2(m)) %= mod;
(sum[] *= sqr3(m)) %= mod; (mul *= m) %= mod;
(add *= m) %= mod;
}
void to_add(int a){
(sum[] += sqr3(a) * len()) %= mod;
(sum[] += * a * sum[]) %= mod;
(sum[] += * sqr2(a) * sum[]) %= mod; (sum[] += sqr2(a) * len()) %= mod;
(sum[] += * a * sum[]) %= mod; (sum[] += a * len()) %= mod; (add += a) %= mod;
}
}T[N<<];
void build(int u,int l,int r){
T[u].l = l , T[u].r = r;
memset(T[u].sum,,sizeof(T[u].sum));
T[u].flag_init();
if(l==r)
return ;
int m = T[u].mid();
build(lson,l,m);
build(rson,m+,r);
}
int op;
void push_down(int u){
T[lson].to_mul(T[u].mul);
T[rson].to_mul(T[u].mul);
T[lson].to_add(T[u].add);
T[rson].to_add(T[u].add);
T[u].flag_init();
}
void push_up(int u){
for(int i=;i<=;i++)
T[u].sum[i] = (T[lson].sum[i] + T[rson].sum[i]) % mod;
} void updata(int u,int l,int r,int mul,int add){
if(T[u].l == l && T[u].r == r){
T[u].to_mul(mul);
T[u].to_add(add);
return ;
}
push_down(u);
int m = T[u].mid();
if(r <= m)
updata(lson,l,r,mul,add);
else if(l >m)
updata(rson,l,r,mul,add);
else
updata(lson,l,m,mul,add), updata(rson,m+,r,mul,add);
push_up(u);
}
int query(int u,int l,int r){
if(T[u].l == l && T[u].r == r)
return T[u].sum[op];
push_down(u);
int m = T[u].mid();
if(r <= m)
return query(lson,l,r);
else if(l >m)
return query(rson,l,r);
else
return (query(lson,l,m)+query(rson,m+,r)) % mod;
} int main(){
int n,m,a,b,c;
while(scanf("%d%d",&n,&m),n||m){
build(,,n+);
while(m--){
scanf("%d",&op);
if(op == ){
scanf("%d%d%d",&a,&b,&op);
printf("%d\n",query(,a,b));
}
else{
scanf("%d%d%d",&a,&b,&c);
if(op == )
updata(,a,b,,c);
else if(op == )
updata(,a,b,c,);
else
updata(,a,b,,c);
}
}
}
return ;
}
Transformation的更多相关文章
- (七)Transformation和action详解-Java&Python版Spark
Transformation和action详解 视频教程: 1.优酷 2.YouTube 什么是算子 算子是RDD中定义的函数,可以对RDD中的数据进行转换和操作. 算子分类: 具体: 1.Value ...
- 线性分式变换(linear fractional transformation)
线性分式变换(linear fractional transformation)的名称来源于其定义的形式:(ax+b)/(cx+d),其中分子分母是线性的,然后最外层是一个分式形式,所以叫做这个名字, ...
- OLE DB Command transformation 用法
OLE DB Command transformation component 能够引用参数,逐行调用sqlcommand,This transformation is typically used ...
- OpenCASCADE General Transformation
OpenCASCADE General Transformation eryar@163.com Abstract. OpenCASCADE provides a general transforma ...
- Informatica Lookup Transformation组件的Connect 与Unconnected类型用法
Informatica Lookup Transformation组件的Connect 与Unconnected类型用法及区别:下面是通一个Lookup在不同Mapping中的使用: 1. Conne ...
- Data Transformation / Learning with Counts
机器学习中离散特征的处理方法 Updated: August 25, 2016 Learning with counts is an efficient way to create a compact ...
- VS非web项目使用Transformation配置文件
Web项目中的Transformation使用起来非常方便,特别是本地与服务器情况不一致时调试下以及webdeploy的配合使用. 步骤: 1. 在项目中新建App.Debug.Config及App. ...
- SAP SLT (Landscape Transformation) 企业定制培训
No. Item Remark 1 SAP SLT概述 SAP Landscape Transformation Overview 2 SAP SLT 安装与配置<1> for abap ...
- Scalaz(55)- scalaz-stream: fs2-基础介绍,fs2 stream transformation
fs2是scalaz-stream的最新版本,沿用了scalaz-stream被动式(pull model)数据流原理但采用了全新的实现方法.fs2比较scalaz-stream而言具备了:更精简的基 ...
- 使用Web.Config Transformation配置灵活的配置文件
发布Asp.net程序的时候,开发环境和发布环境的Web.Config往往不同,比如connectionstring等.如果常常有发布的需求,就需要常常修改web.config文件,这往往是一件非常麻 ...
随机推荐
- good page
http://www.cnblogs.com/zrtqsk/category/540486.html
- Qt 学习之路:文件
文件操作是应用程序必不可少的部分.Qt 作为一个通用开发库,提供了跨平台的文件操作能力.从本章开始,我们来了解下 Qt 的文件以及输入输出的功能,也就是 I/O 系统. Qt 通过QIODevice提 ...
- spring aop 如何切面到mvc 的controller--转载
原文:http://yjian84.iteye.com/blog/1920787 网上搜罗半天,不知道什么原因,看了源码,好像他们说的controller 是不受代理的,也对哈,不知道怎么办,于是在h ...
- easyui总结
1.设置一个区域可拖动的第一种方法直接用html<div id="dd" style="width:100px;height:100px;">< ...
- Linux命令行编辑快捷键
Linux命令行编辑快捷键: history 显示命令历史列表 ↑(Ctrl+p) 显示上一条命令 ↓(Ctrl+n) 显示下一条命令 !num 执行命令历史列表的第num条命令 !! 执行上一条命令 ...
- mysql隐藏文件一定要删除彻底
之前部署自己的服务器机器的时候 机器的mysql密码是不知道的.彻底删除了软件之后还是解决不了问题,而且我把MYSQL在C盘的隐藏文件也给删除了.但是还是不行 最后我偶然发现一个方法去找隐藏问题.我之 ...
- 关于webservice不支持方法重载的解决办法
今天在写WebService时,出现了这样的错误: Count(Int32, Int32) 和 Count(Int32) 同时使用消息名称“Count”.使用 WebMethod 自定义特性的 Mes ...
- os项目icon和default 等相关图标命名规则和大小设置
最新的参考apple官网地址:https://developer.apple.com/library/ios/qa/qa1686/_index.html,网页下面有详细的使用方法(ios7以后的) 转 ...
- 初识sass框架
编写过页面的开发者都知道css这个东西,究其原意,也就是层叠样式表,我们页面的三大结构,html css javascript,其中html负责主要的页面结构,css就负责主要的页面样式,而我们的js ...
- 网络编程(学习整理)---2--(Udp)实现简单的控制台聊天室
1.UDP协议: 总结一下,今天学习的一点知识点! UDP也是一种通信协议,常被用来与TCP协议作比较!我们知道,在发送数据包的时候使用TCP协议比UDP协议安全,那么到底安全在哪里呢?怎么理解呢! ...