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 ...
随机推荐
- 枪击手机屏幕应用android源码
这款是作者最新的一款应用源码,枪击手机屏幕应用源码,该应用源码比较完整的,应用目前已经上线了一些应用商店了,大家想更深入的了解,可以到一些应用商店下载吧,直接搜索相关的关键字就可以搜到了,或者在下面有 ...
- mysql数据库的简单操作
首先进入mysql:mysql -u root -p 1.建库: create database 库名称; 例如:create database mydata;(创建一个名为“mydata”的库): ...
- Java中提供的工具类
System.arraycopy介绍 (1).System.arraycopy用于拷贝数组 arraycopy(Object src, int srcPos, Object dest, int des ...
- 鼠标悬浮图片时弹出透明提示图层的jQuery特效
源码: <!doctype html> <html class="no-js" lang="en"> <head> < ...
- file与 byte[] 互转
byte 转file String filepath="D:\\"+getName(); File file=new File(filepath); ...
- apache 多站点搭建
一.apache配置多站点方法一 1.首先修改apache httpd.conf 文件 启用虚拟主机组件功能 取消 LoadModule vhost_alias_module modules/mod_ ...
- Laravel 5 基础(三)- 向视图传送数据
我们在Routes.php中新建一个路由 Route::get('about', 'PagesController@about'); 在浏览器中浏览会获得一个错误,错误信息仅仅是一个提示信息,缺少细节 ...
- 系统中使用frameset和Iframe刷新页面session失效
问题:Asp.net中每次刷新页面,session中保存的只就丢失 原因: 1.有些杀毒软件会去扫描web.config文件 2.程序内部有让session丢失的代码,或服务器内存不足 3.程序有框架 ...
- CentOS安装 pure-ftpd
yum -y install pam-devel cd /usr/local .tar.gz cd pure-ftpd- ./configure --prefix=/usr/local/pure-ft ...
- 【iis错误码】IIS 服务 这些年遇到的错误码
II 发生错误,客户端似乎有问题.例如,客户端请求不存在的页面,客户端未提供有效的身份验证信息. 400 - 错误的请求. 401 - 访问被拒绝. -- 暴力添加everyone用户, i ...