hdu 4578 Transformation 线段树

时间:2022-12-12 20:24:47

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

代码如下:

 #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&lt ...

  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 离线线段树&plus;间隔求和

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

  6. hdu 3016 dp&plus;线段树

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

  7. HDU 4578 - Transformation - &lbrack;加强版线段树&rsqb;

    题目链接: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. 获取gridpanel 中 checkbox的状态

    最近一直在用extjs前天框架来写作项目,很少用到这个框架,过程中遇到很多麻烦, 可能就是一个小的问题会困扰你很长时间, example: 我做一个报表,要获取gridpanel中 checkbox的 ...

  2. hdu 4876&lpar;剪枝&plus;暴力&rpar;

    题意:给定n,k,l,接下来给出n个数,让你从n个数中选取k个数围成一圈,然后从这k个数中随意选出连续的m(m>=1&&m<=k)个数进行异或后得到[l,r]区间的所有值, ...

  3. 无限滚动 --demo

    <!DOCTYPE HTML><html><head><meta http-equiv="Content-Type" content=&q ...

  4. hibernate中使用HQL进行数据库查询

    1.写的规则比较简单,我讲一下,如图Station这个不是数据库中的表,而是entity包中的类名Station,可以省略 select * 2.返回的类型自动转化为String类型,不用你自己再转化 ...

  5. C&num;使用Thrift简介,C&num;客户端和Java服务端相互交互

    C#使用Thrift简介,C#客户端和Java服务端相互交互 本文主要介绍两部分内容: C#中使用Thrift简介 用Java创建一个服务端,用C#创建一个客户端通过thrift与其交互. 用纯C#实 ...

  6. Centering window on the screen

    The following script shows how we can center a window on the desktop screen. #!/usr/bin/python # -*- ...

  7. Spring Boot 入门之消息中间件篇(五)

    原文地址:Spring Boot 入门之消息中间件篇(五) 博客地址:http://www.extlight.com 一.前言 在消息中间件中有 2 个重要的概念:消息代理和目的地.当消息发送者发送消 ...

  8. WPF 单实例应用程序

    例如:Microsoft Word,不管打开多少个文档(也不管它们是如何打开的),一次只能加载 winword.exe 一个实例. 这便是单实例应用程序. 对于这种单实例应用程序,WPF 本身并未提供 ...

  9. Centos7 使用Dockerfile 制作自己的Dotnetcore程序镜像

    准备Centos7环境及Docker环境 从Docker hub拉取 Microsoft/dotnet 基础镜像(可以使用国内加速) 向Centos7指定目录上传Dotnet Core程序,目录: / ...

  10. idea 编程字体推荐

    monaco vardana fira code mediu dejavu sans mono 上述字体 在14号字 1.1倍行距 时编程比较舒服