hdu 4578 Transformation 线段树
没什么说的裸线段树,注意细节就好了!!!
代码如下:
- #include<iostream>
- #include<stdio.h>
- #include<algorithm>
- #include<iomanip>
- #include<cmath>
- #include<cstring>
- #include<vector>
- #define ll __int64
- #define pi acos(-1.0)
- #define MAX 100003
- #define M 10007
- #define lson i<<1
- #define rson i<<1|1
- using namespace std;
- struct tree
- {
- int l,r,sum[],add,mul;
- void init(int _l,int _r){
- l=_l;r=_r;mul=;add=;
- }
- void Add(int a){
- sum[]=(sum[]+a*a%M*a%M*len()%M+*a*sum[]%M+*a*a%M*sum[]%M)%M;
- sum[]=(sum[]+a*a%M*len()%M+*a*sum[]%M)%M;
- sum[]=(sum[]+a*len()%M)%M;
- add=(add+a)%M;
- }
- void Mul(int a){
- sum[]=sum[]*a%M*a%M*a%M;
- sum[]=sum[]*a%M*a%M;
- sum[]=sum[]*a%M;
- add=add*a%M;
- mul=mul*a%M;
- }
- int len(){
- return r-l+;
- }
- int mid(){
- return (l+r)>>;
- }
- }T[MAX*];
- void down(int i)
- {
- T[lson].Mul(T[i].mul);
- T[rson].Mul(T[i].mul);
- T[lson].Add(T[i].add);
- T[rson].Add(T[i].add);
- T[i].add=;
- T[i].mul=;
- }
- void updateson(int i)
- {
- for(int j=;j<;j++)
- T[i].sum[j]=(T[lson].sum[j]+T[rson].sum[j])%M;
- }
- void built(int i,int l,int r)
- {
- T[i].init(l,r);
- memset(T[i].sum,,sizeof(T[i].sum));
- if(l==r) return ;
- int m=T[i].mid();
- built(lson,l,m);
- built(rson,m+,r);
- }
- void update(int i,int l,int r,int mul,int add)
- {
- if(T[i].l==l&&T[i].r==r){
- T[i].Mul(mul);
- T[i].Add(add);
- return ;
- }
- down(i);
- int m=T[i].mid();
- if(r<=m) update(lson,l,r,mul,add);
- else if(l>m) update(rson,l,r,mul,add);
- else{
- update(lson,l,m,mul,add);
- update(rson,m+,r,mul,add);
- }
- updateson(i);
- }
- int query(int i,int l,int r,int p)
- {
- if(T[i].l==l&&T[i].r==r) return T[i].sum[p-];
- down(i);
- int m=T[i].mid();
- if(r<=m) return query(lson,l,r,p);
- else if(l>m) return query(rson,l,r,p);
- else return (query(lson,l,m,p)+query(rson,m+,r,p))%M;
- }
- int main(){
- int m,n,op,x,y,p;
- while(scanf("%d%d",&n,&m)&&(m+n)){
- built(,,n);
- while(m--){
- scanf("%d%d%d%d",&op,&x,&y,&p);
- if(op==) update(,x,y,,p);
- else if(op==) update(,x,y,p,);
- else if(op==) update(,x,y,,p);
- else printf("%d\n",query(,x,y,p)%M);
- }
- }
- return ;
- }
hdu 4578 Transformation 线段树的更多相关文章
- HDU 4578 Transformation --线段树,好题
题意: 给一个序列,初始全为0,然后有4种操作: 1. 给区间[L,R]所有值+c 2.给区间[L,R]所有值乘c 3.设置区间[L,R]所有值为c 4.查询[L,R]的p次方和(1<=p< ...
- hdu 4578 Transformation 线段树多种操作裸题
自己写了一个带结构体的WA了7.8次 但是测了几组小数据都对..感觉问题应该出在模运算那里.写完这波题解去对拍一下. 以后线段树绝不写struct!一般的struct都带上l,r 但是一条线段的长度确 ...
- Transformation HDU - 4578(线段树——懒惰标记的妙用)
Yuanfang is puzzled with the question below: There are n integers, a 1, a 2, …, a n. The initial val ...
- hdu 4031 attack 线段树区间更新
Attack Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Others)Total Subm ...
- hdu 4288 离线线段树+间隔求和
Coder Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...
- hdu 3016 dp+线段树
Man Down Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...
- HDU 4578 - Transformation - [加强版线段树]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4578 Problem Description Yuanfang is puzzled with the ...
- HDU 4578 Transformation (线段树)
Transformation Time Limit: 15000/8000 MS (Java/Others) Memory Limit: 65535/65536 K (Java/Others)T ...
- HDU 4578——Transformation——————【线段树区间操作、确定操作顺序】
Transformation Time Limit: 15000/8000 MS (Java/Others) Memory Limit: 65535/65536 K (Java/Others)T ...
随机推荐
- 分支优化:neg+sbb算术运算代替逻辑跳转
今天在分析一个样本的时候,发现一段代码. // .text:100012DF sub esi, 0B7h // 183 // .text:100012E5 neg esi // .text:10001 ...
- js设计模式(5)---外观模式
0.前言 早上好,今天天气不错,估计有35度吧,坐在空调室里相当惬意,那么酒足饭饱之后就应该干些正事了. 1. 为什么使用外观模式 外观模式提供了一个高层接口,封装一些复杂操作或繁琐行为,方便调用.门 ...
- node.js和socket.io纯js实现的即时通讯实例分享
在这个例子中,其实node.js并没有真正起到服务器的作用,因为我们这里可以直接运行client.html文件,而不用输入url请求,当 然,要想输入url请求页面内容还需要加入请求静态文件的代码.这 ...
- UDP HelloWord
Client.cpp #include <stdio.h> #include <winsock2.h> #pragma comment (lib,"ws2_32&qu ...
- 有趣的checkbox动画切换状态(支付宝转账成功显示)--第三方开源--AnimCheckBox
这个很有趣的指标通过AnimCheckBox实现,下载地址:https://github.com/lguipeng/AnimCheckBox 代码: activity_main.xml: <Re ...
- linux安装IPython四种方法
IPython是Python的交互式Shell,提供了代码自动补完,自动缩进,高亮显示,执行Shell命令等非常有用的特性.特别是它的代码补完功能,例如:在输入zlib.之后按下Tab键,IPytho ...
- apache+tomcat整合
一 .Apache与Tomcat的比较 apache支持静态页面,tomcat支持动态的,比如servlet等. 一般使用apache+tomcat的话,apache只是作为一个转发,对jsp的处理是 ...
- jquery 在ie10中post数据,最终数据丢失的BUG修复
最近在做项目的时候,发现ie10或者360之类套壳的浏览器(ie10) 在jquery调用post数据的时候,真实的请求并没有上传数据,原因不表,请见 http://stackoverflow.com ...
- Microsoft Azure 全球状态
除了mooncake的中国大陆区域 Azure status http://azure.microsoft.com/en-us/status/?rnd=1#current http://azure.m ...
- 4-2.矩阵乘法的Strassen算法详解
题目描述 请编程实现矩阵乘法,并考虑当矩阵规模较大时的优化方法. 思路分析 根据wikipedia上的介绍:两个矩阵的乘法仅当第一个矩阵B的列数和另一个矩阵A的行数相等时才能定义.如A是m×n矩阵和B ...