https://loj.ac/problem/6346

题目还是没法粘贴……

一道蛮不错的题。

老年选手困了30min后才想要推式子实在是太懒了……

我们可以对每次更新列表看成系数*x即可。

举例:第i次有列表(l,r,x),则第j次求和时答案*(j-i)即可。

但是系数不统一很难受,于是得到:(i-k)*x=(i-1)*a,求a=x+(1-k)*x/(i-1),则(i-1)*a=(i-1)*x+(1-k)*x

于是我们用线段树多维护一个(1-k)*x就行了。

注意一下线段树常数问题。

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cctype>
#include<cstdio>
#include<queue>
#include<cmath>
using namespace std;
typedef long long ll;
const int N=1e5+;
inline int read(){
int X=,w=;char ch=;
while(!isdigit(ch)){w|=ch=='-';ch=getchar();}
while(isdigit(ch))X=(X<<)+(X<<)+(ch^),ch=getchar();
return w?-X:X;
}
ll b[N],tr[N*],lz[N*],t[N*],lazy[N*];
inline void push(int a,int l,int r){
int mid=(l+r)>>;
lz[a<<]+=lz[a];lz[a<<|]+=lz[a];
tr[a<<]+=lz[a]*(mid-l+);tr[a<<|]+=lz[a]*(r-mid);
lz[a]=;
lazy[a<<]+=lazy[a];lazy[a<<|]+=lazy[a];
t[a<<]+=lazy[a]*(mid-l+);t[a<<|]+=lazy[a]*(r-mid);
lazy[a]=;
}
void mdy(int a,int l,int r,int l1,int r1,ll w,bool on){
if(r<l1||r1<l)return;
if(l1<=l&&r<=r1){
if(!on)lz[a]+=w,tr[a]+=w*(r-l+);
else lazy[a]+=w,t[a]+=w*(r-l+);
return;
}
push(a,l,r);
int mid=(l+r)>>;
mdy(a<<,l,mid,l1,r1,w,on);mdy(a<<|,mid+,r,l1,r1,w,on);
tr[a]=tr[a<<]+tr[a<<|];
t[a]=t[a<<]+t[a<<|];
}
ll qry(int a,int l,int r,int l1,int r1,ll k){
if(r<l1||r1<l)return ;
if(l1<=l&&r<=r1)return k*tr[a]+t[a];
push(a,l,r);
int mid=(l+r)>>;
return qry(a<<,l,mid,l1,r1,k)+qry(a<<|,mid+,r,l1,r1,k);
}
int main(){
int n=read();
for(int i=;i<=n;i++)b[i]=b[i-]+read();
int m=read();
for(int i=;i<=m;i++){
int d=read();
if(d==){
int l=read(),r=read(),x=read();
mdy(,,n,l,r,x,);mdy(,,n,l,r,(-i)*x,);
}else{
int l=read(),r=read();
printf("%lld\n",b[r]-b[l-]+qry(,,n,l,r,i-));
}
}
return ;
}

+++++++++++++++++++++++++++++++++++++++++++

+本文作者:luyouqi233。               +

+欢迎访问我的博客:http://www.cnblogs.com/luyouqi233/ +

+++++++++++++++++++++++++++++++++++++++++++

LOJ6346:线段树:关于时间 ——题解的更多相关文章

  1. 【CF576E】Painting Edges 线段树按时间分治+并查集

    [CF576E]Painting Edges 题意:给你一张n个点,m条边的无向图,每条边是k种颜色中的一种,满足所有颜色相同的边内部形成一个二分图.有q个询问,每次询问给出a,b代表将编号为a的边染 ...

  2. 【bzoj4311】向量 线段树对时间分治+STL-vector维护凸包

    题目描述 你要维护一个向量集合,支持以下操作: 1.插入一个向量(x,y) 2.删除插入的第i个向量 3.查询当前集合与(x,y)点积的最大值是多少.如果当前是空集输出0 输入 第一行输入一个整数n, ...

  3. 【BZOJ-4184 】 Shallot 线段树按时间分治 + 线性基

    4184: shallot Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 356  Solved: 180[Submit][Status][Discu ...

  4. BZOJ_4025_二分图_线段树按时间分治+并查集

    BZOJ_4025_二分图_线段树按时间分治+并查集 Description 神犇有一个n个节点的图.因为神犇是神犇,所以在T时间内一些边会出现后消失.神犇要求出每一时间段内这个图是否是二分图.这么简 ...

  5. BZOJ_4311_向量_线段树按时间分治

    BZOJ_4311_向量_CDQ分治+线段树按时间分治 Description 你要维护一个向量集合,支持以下操作: 1.插入一个向量(x,y) 2.删除插入的第i个向量 3.查询当前集合与(x,y) ...

  6. BZOJ_4184_shallot_线段树按时间分治维护线性基

    BZOJ_4184_shallot_线段树按时间分治维护线性基 Description 小苗去市场上买了一捆小葱苗,她突然一时兴起,于是她在每颗小葱苗上写上一个数字,然后把小葱叫过来玩游戏. 每个时刻 ...

  7. Bipartite Checking CodeForces - 813F (线段树按时间分治)

    大意: 动态添边, 询问是否是二分图. 算是个线段树按时间分治入门题, 并查集维护每个点到根的奇偶性即可. #include <iostream> #include <sstream ...

  8. Codeforces 750E New Year and Old Subsequence 线段树 + dp (看题解)

    New Year and Old Subsequence 第一感觉是离线之后分治求dp, 但是感觉如果要把左边的dp值和右边的dp值合起来, 感觉很麻烦而且时间复杂度不怎么对.. 然后就gun取看题解 ...

  9. hdu 4107 Gangster(线段树,时间卡得很严)

    这道题目的数据卡得好厉害. 题目明显是考察线段树延迟标记的,但是因为要考虑到p的值,这种延迟是有条件的:在该节点下所有的数据对于p都应该位于p的同一侧.要么都比p大,要么都比p小. 开始的时候我用一个 ...

  10. 2019牛客多校第二场E MAZE(线段树 + 矩阵)题解

    题意: n * m的矩阵,为0表示可以走,1不可以走.规定每走一步只能向下.向左.向右走.现给定两种操作: 一.1 x y表示翻转坐标(x,y)的0.1. 二.2 x y表示从(1,x)走到(n,y) ...

随机推荐

  1. Question | 你所遇到的验证码问题可能都在这里了

    本文来自网易云社区 "Question"为网易云易盾的问答栏目,将会解答和呈现安全领域大家常见的问题和困惑.如果你有什么疑惑,也欢迎通过邮件(zhangyong02@corp.ne ...

  2. hdu2553N皇后问题(dfs,八皇后)

    N皇后问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  3. OSG-漫游

    本文转至http://www.cnblogs.com/shapherd/archive/2010/08/10/osg.html 作者写的比较好,再次收藏,希望更多的人可以看到这个文章 互联网是是一个相 ...

  4. 测试开发的成长之路 - 自动化一站式平台(UI、接口)

    前言 在自动化测试过程中,随着对接的自动化需求不断增加,测试用例数量显著上升,参与自动化测试的人也越来越多,多人协作就会碰到很多问题,包括脚本.数据.版本.项目整合.持续集成等,而且也增加了后期维护的 ...

  5. Linux命令应用大词典-第26章 模块和内核管理

    26.1 lsmod:显示内核中模块的状态 26.2 get_module:查看内核模块详细信息 26.3 modinfo:显示内核模块信息

  6. 第三模块:面向对象&网络编程基础 第1章 面向对象

    我的失败与梦想(一) 我的失败与梦想之为何创办路飞学城 01-编程范式 02-面向过程编程 03-面向对象编程介绍 04-定义类与实例化出对象 05-如何使用类 06-如何使用对象 07-属性查找与绑 ...

  7. 【python 3.6】从网站抓图并存放到本地路径

    #!/usr/bin/python # -*- coding: UTF-8 -*- _author_ = 'BH8ANK' import urllib.request import re import ...

  8. sql STUFF 分组

    ---将sql想关的数据放到一个字段里 select r.Region_Name, )) [text()] from City c2 inner join Region as r2 on c2.Reg ...

  9. Fafa and the Gates(模拟)

    Two neighboring kingdoms decided to build a wall between them with some gates to enable the citizens ...

  10. Thunder团队第一周 - Scrum会议4

    Scrum会议4 小组名称:Thunder 项目名称:爱阅app Scrum Master:代秋彤 工作照片: 参会成员: 王航:http://www.cnblogs.com/wangh013/ 李传 ...