考虑分块,每块维护两个标记$ts,td$。

那么对于块中一个位置$i$,它的实际值为$i\times td+ts+v_i$。

修改的时候,对于整块,直接打标记,对于零散的暴力修改,然后重构凸壳,时间复杂度$O(\sqrt{n})$。

查询的时候在凸壳上二分即可,时间复杂度$O(\sqrt{n}\log n)$。

#include<cstdio>
#define N 100010
typedef long long ll;
int n,m,cnt,lim,i,op,x,y,pos[N],st[N],en[N],R[N],q[N];ll v[N],ts[N],td[N];
inline int read(){char c;bool f=0;int a=0;while(!((((c=getchar())>='0')&&(c<='9'))||(c=='-')));if(c!='-')a=c-'0';else f=1;while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';if(f)a=-a;return a;
}
inline double cross(int x,int y){return(double)(v[x]-v[y])/(double)(y-x);}
inline void build(int x){int i,L=st[x],t=L;q[t]=t;for(i=t+1;i<=en[x];q[++t]=i++)while(t>L&&cross(i,q[t])<=cross(q[t],q[t-1]))t--;R[x]=t;
}
inline void change(int x,int y,ll s,ll d){if(pos[x]==pos[y]){for(int i=x;i<=y;i++)v[i]+=s+d*i;build(pos[x]);return;}for(int i=pos[x]+1;i<pos[y];i++)ts[i]+=s,td[i]+=d;for(int i=en[pos[x]];i>=x;i--)v[i]+=s+d*i;build(pos[x]);for(int i=st[pos[y]];i<=y;i++)v[i]+=s+d*i;build(pos[y]);
}
inline void modify(int x,int y,ll z){change(x,y,z*(1-x),z);if(y<n)change(y+1,n,z*(y-x+1),0);
}
inline void up(ll&a,ll b){if(a<b)a=b;}
inline ll ask(int x){int t=st[x],l=t+1,r=R[x],mid;while(l<=r){mid=(l+r)>>1;if(cross(q[mid-1],q[mid])<td[x])l=(t=mid)+1;else r=mid-1;}return td[x]*q[t]+ts[x]+v[q[t]];
}
inline ll query(int x,int y){ll t=-(1LL<<62);if(pos[x]==pos[y]){for(int i=x;i<=y;i++)up(t,td[pos[i]]*i+ts[pos[i]]+v[i]);return t;}for(int i=pos[x]+1;i<pos[y];i++)up(t,ask(i));for(int i=en[pos[x]];i>=x;i--)up(t,td[pos[i]]*i+ts[pos[i]]+v[i]);for(int i=st[pos[y]];i<=y;i++)up(t,td[pos[i]]*i+ts[pos[i]]+v[i]);return t;
}
int main(){n=read();for(i=1;i<=n;i++)v[i]=v[i-1]+read();while(lim*lim*8<n)lim++;for(i=1;i<=n;i++)pos[i]=(i-1)/lim+1;cnt=pos[n];for(i=1;i<=n;i++)en[pos[i]]=i;for(i=n;i;i--)st[pos[i]]=i;for(i=1;i<=cnt;i++)build(i);m=read();while(m--){op=read(),x=read(),y=read();if(!op)modify(x,y,read());else printf("%lld\n",query(x,y));}return 0;
}

  

转载于:https://www.cnblogs.com/clrs97/p/4984182.html

BZOJ2388 : 旅行规划相关推荐

  1. BZOJ2388: 旅行规划

    http://www.lydsy.com/JudgeOnline/problem.php?id=2388 带区间加修改,求区间内的最大前缀和. 设sum[i]代表i的前缀和,tag[i][j]代表i到 ...

  2. 【分块】[LUOGU 旅行规划] 分块+二分+凸包优化

    题目: 题目链接:[LUOGU 旅行规划] 题解: (由于这个,,我竟然还去写了二维凸包的模板题作为练习,,,然而,一点用都没有,,,,) 先解释一下题面的意思:就是一个区间加的操作,再加上一个区间的 ...

  3. 青岛旅行规划及玩后感

    之前一直属于宅男类型,出去玩也都是周边短途1日游,不需要什么规划,想来去南浔的那次属于最有规划的了,网上订了门票,其他的都是走到哪算到哪. 2012年6月30号的青岛行算是第一次意义上自己的规划旅行, ...

  4. 离散数学图论旅行规划问题_《图论及其应用》(一)

    点击返回目录 一. 定义 1.1 图的基本概念 图或有序对或序偶(P1).有限图/平凡图/非平凡图/空图(P1).顶点数或阶数/边数/重数/重边/环(P1).简单图/复合图(P1).相邻(P2).相关 ...

  5. 离散数学图论旅行规划问题_2020年MathorCup高校数学建模挑战赛——C 题 仓内拣货优化问题...

    下面的链接是精华版思路,亮点是对第六问的探讨. 高度概括一下:第一问曼哈顿,第二问用免疫,三问增加任务单,四问增加拣货员,五问改变复核台,六问亮点来探讨~ 有点皮 MathorCup C题 仓内拣货优 ...

  6. 离散数学图论旅行规划问题_旅游路径规划问题.pdf

    参赛密码 (由组委会填写) 第十二届 "中关村青联杯"全 国研 究生 第十二届 "中关村青联杯"全 国研 究生 数学建模竞赛 数学建模竞赛 题 目 旅游路径规划 ...

  7. Google地图的trip plan是旅行规划的好帮手!

  8. @bzoj - 2388@ 旅行规划

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 请你维护一个序列,支持两种操作: (1)某个区间 [x, y] ...

  9. c语言旅行规划问题,利用动态规划法求解旅行商问题(TSP)的C语言实现(一)...

    算法改进:通过改进集合操作降低比较次数,利用二进制表示集合.确定元素k是否在集合S中的比较次数为1,从而降低了时间复杂度到O(n2^n) #include #include #include #inc ...

最新文章

  1. Android 基本面试题
  2. innobackupex自动备份脚本
  3. golang避免XSS攻击
  4. css 可编辑,如何设置DIV可编辑
  5. python爬虫之路scrapy
  6. 【数据结构和算法笔记】用c和c++分别实现二叉搜索树
  7. Aloha:一个略屌的分布式任务调度框架
  8. 关于交流电路的谐振等问题
  9. 地理信息系统(GIS)系列——ArcGIS API for JavaScript 3.9(2)
  10. 软件测试——测试流程重要性
  11. 上海海洋大学计算机二级成绩,上海海洋大学是几本 2018分数线是多少分
  12. 计算机之父童年的故事ppt,24计算机之父童年的故事
  13. filco的pin码_filco蓝牙键盘配对流程,filco 忍者二代 蓝牙怎么
  14. mysql cpu 内存的选择
  15. 电路设计经验总结(以软件cadence allegro为例)
  16. Verilog利用状态机实现的交通灯控制
  17. 在TTF字体中提取指定文字
  18. 织梦DEDECMS介绍下载安装
  19. 计算机不能上网 检查路线,电脑上不了网怎么解决?
  20. 使用 dockerfile 构建 WordPress 环境

热门文章

  1. Linux进程状态如何切换,Linux系统如何切换前台进程和后台进程(2)
  2. jquery 控制CSS属性display 实现元素的显示、隐藏
  3. 量子计算机新科技未来,能够“预测多个未来”的量子计算机诞生
  4. sklearn常用模块
  5. REST API解析
  6. 陈百强原来这么帅_外套假两件,原来这么帅。
  7. bootstrap 栅栏剧中_Bootstrap 栅栏布局中 col-xs-*、col-sm-*、col-md-*、col-lg-* 区别及使用方法...
  8. 矩阵迹的性质_矩阵(含逆)的迹、行列式关于矩阵自身的导数计算与Maple验证...
  9. 10以内数的组成分解图_学前儿童如何学习20以内的加减法,收藏了
  10. 自然语言系列学习之表示学习与知识获取(七)利用关系路径进行关系抽取