http://acm.hdu.edu.cn/showproblem.php?pid=6562

题意:

q次操作

1.将第l~r个数的左边和和右边都加上一个数d, 使得这个数变成 dsiddsid的形式

2.询问区间和.

题解:对于一个数字x若执行第一个操作则  

则若对于一个区间sum(l,r)执行第一个操作则  

设 

则便可以用线段树去维护这两个东西便可,这里只考虑了d是一位数的情况,但是在线段树下传标记的过程中可能一个区间多次执行第一个操作,那么wrap的d便不是一位数,而且左右两边的d是镜像的,我们便要用两个lazy标记,lazy1维护左边加的数,lazy2维护右边加的数,同时可以用lazylen表示这两个lazy的,然后好好考虑一下如何维护sum和sumlen即可

个人感悟:在敲的时候思路是基本对的 , 但是我在维护 的时候 为了计算10的多少次幂,我维护的是一个长度 ,然后查询的时候,用一个阶乘的fac10[]数组 , 果然RE了 , 大神的代码, 发现别人维护的是一个10^(len)的值,其实细想也是,我们主要维护的就是这个,我居然多次了一举,太菜了我

#include <iostream>
#include <string.h>
#include <algorithm>
#include <stdio.h>
#include <math.h>
#include <queue>
#define MAXN 400010
#define inf 0x3f3f3f3f
#define LL long long
using namespace std;
const int N=1e7+;
const int mod = 1e9+;
struct node{
int l,r; //区间[l,r]
LL addl,addr; //区间的延时标记
LL sum,laz,all; /// 区间和 laz增加位数 all=10^位数
}tree[MAXN<<];//一定要开到4倍多的空间
void pushup(int index) {
tree[index].sum = (tree[index<<].sum+tree[index<<|].sum)%mod;
tree[index].all = (tree[index<<].all+tree[index<<|].all)%mod;
}
void pushdown(int index) {
if(tree[index].laz > ) {
tree[index<<].addl = (tree[index].addl*tree[index<<].laz%mod + tree[index<<].addl%mod)%mod;
tree[index<<|].addl = (tree[index].addl*tree[index<<|].laz%mod + tree[index<<|].addl%mod)%mod; tree[index<<].addr = (tree[index<<].addr*tree[index].laz%mod + tree[index].addr%mod)%mod;
tree[index<<|].addr = (tree[index<<|].addr*tree[index].laz%mod+ tree[index].addr)%mod; tree[index<<].sum = (( tree[index<<].sum*tree[index].laz%mod
+ tree[index].addl*tree[index<<].all%mod*tree[index].laz%mod)%mod
+ tree[index].addr*(tree[index<<].r-tree[index<<].l+)%mod)%mod;
tree[index<<|].sum = ((tree[index<<|].sum*tree[index].laz%mod
+ tree[index].addl*tree[index<<|].all%mod*tree[index].laz%mod)%mod
+ tree[index].addr*(tree[index<<|].r-tree[index<<|].l+)%mod)%mod; tree[index<<].all = (tree[index<<].all*tree[index].laz%mod*tree[index].laz)%mod;
tree[index<<|].all = (tree[index<<|].all*tree[index].laz%mod*tree[index].laz)%mod;
tree[index<<].laz = tree[index].laz*tree[index<<].laz%mod;
tree[index<<|].laz = tree[index].laz*tree[index<<|].laz%mod;
tree[index].laz = ; tree[index].addl = ;
tree[index].addr = ;
} }
void build(int l,int r,int index){
tree[index].sum = ;
tree[index].l = l; tree[index].r = r;
tree[index].addl = tree[index].addr = ;
tree[index].laz = ;//刚开始一定要清0
if(l == r) {
tree[index].all = ;
return ;
}
int mid = (l+r)>>;
build(l,mid,index<<);
build(mid+,r,index<<|);
pushup(index);
}
void update(int l,int r,int index,LL val) {
if(l <= tree[index].l && r >= tree[index].r) {
tree[index].sum = ((tree[index].sum*%mod
+ val*(tree[index].r-tree[index].l+)%mod)%mod
+ val**tree[index].all %mod )%mod ;
tree[index].all = tree[index].all*%mod;
tree[index].addl = (val*tree[index].laz%mod + tree[index].addl)%mod;
tree[index].laz = tree[index].laz*%mod;
tree[index].addr = (tree[index].addr*%mod + val)%mod;
return ;
}
pushdown(index);
int mid = (tree[index].l+tree[index].r)>>;
if(l <= mid) update(l,r,index<<,val);
if(r > mid) update(l,r,index<<|,val);
pushup(index);
}
LL query(int l,int r,int index) {
if(l <= tree[index].l && r >= tree[index].r) {
return tree[index].sum;
}
pushdown(index);
int mid = (tree[index].l+tree[index].r)>>;
LL ans = ;
if(l <= mid) ans = (ans+query(l,r,index<<))%mod;
if(r > mid) ans = (ans+query(l,r,index<<|))%mod;
return ans;
}
int main()
{
int _; scanf("%d",&_);
for(int ncase=;ncase<=_;ncase++) {
int n,m; scanf("%d%d",&n,&m);
printf("Case %d:\n",ncase);
build(,n,);
while(m--) {
char s[]; scanf("%s",s);
int l,r,v; scanf("%d%d",&l,&r);
if(s[]=='w') {
scanf("%d",&v); update(l,r,,v);
} else {
printf("%lld\n",query(l,r,));
}
}
}
return ;
}

2018 CCPC 吉林站 H Lovers || HDU 6562 (线段树哦)的更多相关文章

  1. 2018 CCPC 吉林站 H Lovers

    2018 CCPC 吉林站 H Lovers 传送门:https://www.spoj.com/problems/LIS2/en/ 题意: q次操作 1.将第l~r个数的左边和和右边都加上一个数d, ...

  2. 2018 CCPC 桂林站(upc复现赛)补题

    2018 CCPC 桂林站(upc复现赛)补题 G.Greatest Common Divisor(思维) 求相邻数的差值的gcd,对gcd分解素因子,对所有的素因子做一次遍历,找出最小答案. 几个样 ...

  3. hdu 5877 线段树(2016 ACM/ICPC Asia Regional Dalian Online)

    Weak Pair Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total ...

  4. hdu 4052 线段树扫描线、奇特处理

    Adding New Machine Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  5. hdu 3974 线段树 将树弄到区间上

    Assign the task Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  6. hdu 3436 线段树 一顿操作

    Queue-jumpers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

  7. hdu 3397 线段树双标记

    Sequence operation Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  8. hdu 4578 线段树(标记处理)

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

  9. hdu 4533 线段树(问题转化+)

    威威猫系列故事——晒被子 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Tot ...

随机推荐

  1. 002--PowerDesigner显示注释comment

    PowerDesigner显示注释comment 参考博客:https://blog.csdn.net/chao_1990/article/details/52620206 原始样式 显示操作 调出执 ...

  2. ToolProvider.getSystemJavaCompiler()方法空指针的排坑

    起因: 我在做一个编译Java代码的功能,基本写的差不多了,我就想把它打包部署到我服务器上跑一跑,但是这不做不知道,一做果然就出了问题.我在IDEA上跑一点问题都没有,但是打包成Jar后,后台就显示空 ...

  3. Java-Lambda表达式第一篇认识Lambda表达式

    1.Lambda表达式时Java 8新增的特性.Lambda表达式支持将代码块作为方法参数,Lambda表达式允许使用更简洁的代码创建只有一个抽象方法的接口(即函数式接口)的实例. 2.当使用Lamb ...

  4. C++之匿名对象与析构函数的关系

    #include <iostream> using namespace std; class Location{ public: Location(, ){ X = xx; Y = yy; ...

  5. vue2.0--axios的跨域问题

    鉴于这个问题,特地的提取了一个demo来进行截图说明. 一.根据官网的的安装流程安装vue-cli # 全局安装 vue-cli $ npm install --global vue-cli # 创建 ...

  6. IDEA中Java目录结构

    IDEA中Java的目录结构 1.首先新建Project,选择Empty,新建空的项目 2.选择Module时候,需要选择JDK,JDK只需要选择到Java Home目录就可以了 3.创建好Modul ...

  7. 使用Webpack的代码分离实现Vue懒加载(译文)

    当一个Vue的项目体积变得十分庞大的时候,使用Webpack的代码分离功能将Vue Components,routes或Vuex的代码进行分离并按需加载,会极大的提高App的首屏加载速度. 在Vue的 ...

  8. web框架的本质(使用socket实现的最基础的web框架、使用wsgiref实现的web框架)

    import socket def handle_request(client): data = client.recv(1024) client.send("HTTP/1.1 200 OK ...

  9. 【推荐系统】知乎live入门1.推荐概览与框架

    参考链接 [推荐系统]知乎live入门 目录 1.推荐概览与框架 2. 推荐系统的架构和模块 3. 推荐召回 4. 排序 5. 用户画像 6. 特征工程 7. 回归到推荐算法 总结 参考文献 ==== ...

  10. WPF自定义样式篇-DataGrid

    WPF自定义样式篇-DataGrid 先上效果图: 样式:  <!--DataGrid样式-->    <Style TargetType="DataGrid"& ...