没什么说的裸线段树,注意细节就好了!!!

代码如下:

 #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 线段树的更多相关文章

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

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

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

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

  3. Transformation HDU - 4578(线段树——懒惰标记的妙用)

    Yuanfang is puzzled with the question below: There are n integers, a 1, a 2, …, a n. The initial val ...

  4. hdu 4031 attack 线段树区间更新

    Attack Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others)Total Subm ...

  5. hdu 4288 离线线段树+间隔求和

    Coder Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Su ...

  6. hdu 3016 dp+线段树

    Man Down Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total S ...

  7. HDU 4578 - Transformation - [加强版线段树]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4578 Problem Description Yuanfang is puzzled with the ...

  8. HDU 4578 Transformation (线段树)

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

  9. HDU 4578——Transformation——————【线段树区间操作、确定操作顺序】

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

随机推荐

  1. [windows phone开发]新生助手的开发过程与体会一

    功能需求分析: 1.  为到达学院的新生指路,给出所有路线,并给出必要提示: 2.  对学院建筑进行介绍: 3.  对学院周边环境(交通.购物.银行等)进行介绍: 4.  必要的应用设置 总体设计: ...

  2. ubuntu 14.04 下 安装samba 及SSH 服务端的方法

    之前说了 FTP服务器的搭建:http://www.cnblogs.com/bcsflilong/p/4200139.html 今天说一下samba 和ssh服务器的搭建. 先说samba 吧. 在u ...

  3. Android开发之计算器(一)界面设计之activity_main布局文件

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  4. php保存base64数据

    php保存base64数据 if(isset($param['cover_pic']) && !empty($param['cover_pic'])) {
 if (preg_matc ...

  5. 忘记linux root密码怎么办?

    摘自:<鸟哥的Linux私房菜> 常常有些朋友在配置好了Linux之后,结果root密码给他忘记去!要重新安装吗?不需要的, 你只要以单人维护模式登陆即可更改你的root密码喔!由于lil ...

  6. 《零成本实现Web自动化测试--基于Selenium》第一章 自动化测试基础

    第一篇 Selenium 和WebDriver工具篇 第一章 自动化测试基础 1.1    初识自动化测试 自动化测试有两种常见方式 1.1.1 代码驱动测试,又叫测试驱动开发(TDD) 1.1.2 ...

  7. DBCC Check

    DBCC CHECKDB 可以完成两个任务 (1)检查数据库里有没有损坏发生 (2)尽力修复数据库损坏,是数据能重新被正常访问 DBCC 下列步骤执行下列操作 1.检查一些关键性的表 sysalocu ...

  8. SVN四部曲之SVN使用详解进阶

    SVN简介: 为什么要使用SVN? 程序员在编写程序的过程中,每个程序员都会生成很多不同的版本,这就需要程序员有效的管理代码,在需要的时候可以迅速,准确取出相应的版本. Subversion是什么? ...

  9. const 的全面总结

    可以定义const常量 const int Max = 100; 2 便于进行类型检查 const常量有数据类型,而宏常量没有数据类型.编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类 ...

  10. (菜鸟要飞系列)四,基于Asp.Net MVC5的后台管理系统(zTree绑定Json数据生成树)

    上一次老师让我们用递归将中国城市镇县四级联动 显示在树上,那个时候就知道可以显示在zTree上,可是苦于对Json的不了解,对zTree的Api的不了解,一直没有做出来,只好将递归算法显示在了窗体上, ...