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. 解决美图看看不出现在“Open with”的子菜单中的问题

    最近由于特殊需求,要使用美图看看,Win10系统,美图看看工作倒也正常,但出现一个比较郁闷的情况,就是只能在“Open with”的最下面一个子菜单中选择“Choose another app”,然后 ...

  2. 初识java atomic

    2018-8-19 昨天看到java.util.concurrent.atomic相关的文章,之前有过留意但并未去了解,正好有空学习一下.本人理解atomic包是concurrent子包,当是为并发所 ...

  3. 小组ITalk网站开发中使用到的一些技巧

    ----->Display属性和Visibility属性:一个清除内容和框体,另一个只清除内容而保留窗体: $('#abc').css({ 'font-size' : '12px', '-web ...

  4. redis集群搭建(伪集群)

    1.准备工作 去官网下载好你想要安装的redis版本,下载链接 2.搭建步骤 输入命令yum install gcc-c++安装好gcc环境,将下载好的redis安装包上传到 /usr/local 解 ...

  5. redis 在java中的使用

    1.首先下载jar包放到你的工程中 2.练习 package com.jianyuan.redisTest; import java.util.Iterator;import java.util.Li ...

  6. Redis 数据结构服务器

    Redis 简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久 ...

  7. Laxcus大数据管理系统2.0(12)- 第十章 运行

    第十章 运行 本章将介绍一些Laxcus集群基本运行.使用情况,结合图片和表格表示.地点是我们的大数据实验室,使用我们的实验集群.数据来自于我们的合作伙伴,软件平台混合了Windows和Fedora  ...

  8. 从零开始的Python学习Episode 1

    一.输入与输出 1.输入 input("number:") num = input("number:") 下面一段可以把输入的信息存在num中. 注意:输入的信 ...

  9. php redis和java混用问题

    目前项目是 一个php 一个java  共用一套 redis  key  value 也都一样,  java 使用 gson 解析json   会将php 设置的json里面看  {"a&q ...

  10. df -h 卡住

    mount 检查是否有挂载nfs的分区       网络挂载     如果有请umount  -l   /相应目录      umount -l  10.74.82.205:/letv/fet/nfs ...