我们考虑 \(\sum_{i=l}^r{f_i(x)}\) 是个什么东西。首先这个奇怪的东西很好离线做,所以尽管题目要求强制在线,我们还是离线下来试试。

我们发现,我们可以 \(x\) 坐标从 \(1\) 到 \(200000\) 扫过去,对于每个 \(f_i\),在 \(x_{i,1}+1\) 和 \(x_{i,2}+1\) 两个位置打标记进行更改。这样整个扫描过程就是 \(O(k+n)\) 的。然后考虑维护答案,我们发现,\(y=y_1\) 和 \(y=y_2\) 其实可以写成 \(y=0x+y_1,y=0x+y_2\) 的形式。那么,我们的 \(f_i(x)\) 就可以统一写成 \(ax+b\) 的形式。则 \(\sum_{i=l}^r{f_i(x)}=(\sum_{i=l}^r{a_i})x+\sum_{i=l}^r{b_i}\)。

这样,我们就只需要维护 \(a\) 和 \(b\) 的区间和。我们分别开两个线段树维护 \(a\) 和 \(b\) 的区间和。每次更改,就单点修改位置 \(i\) 上面的 \(a_i\) 和 \(b_i\)。然后我们提前把所有的询问挂在自己的 \(x_i\) 上,处理完当前 \(x\) 上的所有操作之后,对所有的 \([l,r]\) 询问进行查询得到 \(\sum_{i=l}^r{a_i}\) 和 \(\sum_{i=l}^r{b_i}\)。

但是现在强制在线,怎么做呢?

我们发现,只要我们存储下每个 \(x\) 所对应的 \(a\) 和 \(b\) 序列,就可以每次快速得到答案。但是存储 \(a\) 和 \(b\) 显然不现实,我们就考虑可持久化线段树。我们找到原先的所有操作:单点修改、区间查询,这恰好是可以使用主席树完成的工作。又因为是静态的,我们完全可以把主席树处理出来之后,带到询问里去计算。

还有一个小小的问题,询问时的 \(x\) 是可能达到 \(10^9\) 的,如何做呢?我们发现 \(2\cdot 10^5\) 之后的 \(x\) 都已经到了第三阶段,也就是 \(y=y_2\),可以直接处理其前缀和,然后 \(O(1)\) 计算答案。

注意我们同一个 \(x\) 上可能有很多的操作,也可能没有操作,不能把 \(x\) 作为主席树的时间轴,而应当对每个 \(x\) 上的所有操作执行完之后,记录当前主席树的最新版本。

如果我们记 \(k\) 为 更改 操作中出现的最大 \(x\),那么时间复杂度就是 \(O(k+(n+m)\log n)\),空间复杂度 \(O(n\log n)\)。

#define rd(i,n) for(ll i=0;i<n;i++)
#define rp(i,n) for(ll i=1;i<=n;i++)
#define rep(i,a,b) for(ll i=a;i<=b;i++)
typedef long long ll;
class pst{
private:
ll sum[10000005];
int ls[10000005],rs[10000005],cnt,Len;
int root[400005],Ti;
inline void Init(int &i,int l,int r,int* a){
i=++cnt;
if(l==r){
sum[i]=a[l];
return;
}
int mid=l+r>>1;
Init(ls[i],l,mid,a);
Init(rs[i],mid+1,r,a);
sum[i]=sum[ls[i]]+sum[rs[i]];
}
inline void Modify(int &i,int his,int x,int v,int l,int r){
i=++cnt;
if(l==r){
sum[i]=v;
return;
}
int mid=l+r>>1;
if(x<=mid){
rs[i]=rs[his];
Modify(ls[i],ls[his],x,v,l,mid);
}else{
ls[i]=ls[his];
Modify(rs[i],rs[his],x,v,mid+1,r);
}
sum[i]=sum[ls[i]]+sum[rs[i]];
}
inline ll Query(int i,int L,int R,int l,int r){
if(!i)return 0;
if(L<=l&&r<=R)return sum[i];
int mid=l+r>>1;
ll res=0;
if(ls[i]&&L<=mid)res+=Query(ls[i],L,R,l,mid);
if(rs[i]&&R>mid)res+=Query(rs[i],L,R,mid+1,r);
return res;
}
public:
inline void init(int len,int* a){
Len=len;
Init(root[0],1,len,a);
}
inline void modify(int x,int v){
int cnt=++Ti;
Modify(root[cnt],root[cnt-1],x,v,1,Len);
}
inline ll query(int ti,int l,int r){
return Query(root[ti],l,r,1,Len);
}
inline int curver(){
return Ti;
}
}ta,tb;
const int N=75005;
const int M=200000;
const int P=1000000000;
int n,m,q,l,r,x,xl[N],xr[N],yl[N],yr[N],a[N],b[N],Empty[N];
ll sum[N];
int vera[M+5],verb[M+5];
vt<int>v1[M+5],v2[M+5];
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
n=in();
rp(i,n)xl[i]=in(),xr[i]=in(),yl[i]=in(),a[i]=in(),b[i]=in(),yr[i]=in();
rp(i,n)v1[xl[i]+1].pb(i),v2[xr[i]+1].pb(i);
ta.init(n,Empty);tb.init(n,yl);
rep(ti,1,M){
for(auto j:v1[ti]){
ta.modify(j,a[j]);
tb.modify(j,b[j]);
}
for(auto j:v2[ti]){
ta.modify(j,0);
tb.modify(j,yr[j]);
}
vera[ti]=ta.curver();
verb[ti]=tb.curver();
}
rp(i,n)sum[i]=sum[i-1]+yr[i];
q=in();
ll ans=0;
rd(_,q){
l=in(),r=in(),x=in();
x=(x+ans)%P;
if(x<=M){
ans=ta.query(vera[x],l,r)*x+tb.query(verb[x],l,r);
}else{
ans=sum[r]-sum[l-1];
}
out(ans)('\n');
}
return 0;
}
//Crayan_r

CF837G - Functions On The Segments的更多相关文章

  1. CF数据结构练习(二)

    1. 833D Red-Black Cobweb 大意: 给定树, 边为黑色或白色, 求所有黑白边比例在$[\frac{1}{2},2]$内的路径边权乘积的乘积. 考虑点分治, 记黑边数为$a$, 白 ...

  2. R Customizing graphics

    Customizing graphics GraphicsLaTeXLattice (Treillis) plots In this chapter (it tends to be overly co ...

  3. (转) Functions

    Functions Functions allow to structure programs in segments of code to perform individual tasks. In ...

  4. IDA .edata .rdata .idata .text segments

    .rdata is for const data. It is the read only version of the .data segment. .idata holds the import ...

  5. [LeetCode] Number of Segments in a String 字符串中的分段数量

    Count the number of segments in a string, where a segment is defined to be a contiguous sequence of ...

  6. Greenplum记录(一):主体结构、master、segments节点、interconnect、performance monitor

    结构:Client--master host--interconnect--segment host 每个节点都是单独的PG数据库,要获得最佳的性能需要对每个节点进行独立优化. master上不包含任 ...

  7. Application package 'AndroidManifest.xml' must have a minimum of 2 segments.

    看了源码就是packagename里面必须包含一个. 源码在: ./sdk/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/id ...

  8. asp.net MVC helper 和自定义函数@functions小结

    asp.net Razor 视图具有.cshtml后缀,可以轻松的实现c#代码和html标签的切换,大大提升了我们的开发效率.但是Razor语法还是有一些棉花糖值得我们了解一下,可以更加强劲的提升我们 ...

  9. segments&cache

    Segments 执行效果 命令  在 sense 里边执行  GET /abcd/_segments  前边的是索引名称,后边是请求 段信息 说明  索引是面向分片的,是由于索引是由一个或多个分片( ...

  10. 【跟着子迟品 underscore】Array Functions 相关源码拾遗 & 小结

    Why underscore 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中. 阅读一些著名框架类库的源码,就好像和一个个大师对 ...

随机推荐

  1. Java9-17新特性一览,了解少于3个你可能脱节了

    前言 Java8出来这么多年后,已经成为企业最成熟稳定的版本,相信绝大部分公司用的还是这个版本,但是一眨眼今年Java19都出来了,相信很多Java工程师忙于学习工作对新特性没什么了解,有的话也仅限于 ...

  2. 【离线数仓】Day04-即席查询(Ad Hoc):Presto链接不同数据源查询、Druid建多维表、Kylin使用cube快速查询

    一.Presto 1.简介 概念:大数据量.秒级.分布式SQL查询engine[解析SQL但不是数据库] 架构 不同worker对应不同的数据源(各数据源有对应的connector连接适配器) 优缺点 ...

  3. 项目完成小结 - Django-React-Docker-Swag部署配置

    前言 最近有个项目到一段落,做个小结记录. 内容可能会多次补充,在博客上实时更新哈~ 如果是在公众号阅读这篇文章,可以点击「查看原文」访问最新版本~ 这个项目是前后端分离,后端为了快,依然用我的Dja ...

  4. 配置php-fpm识别php文件访问

    以前是装的集成环境,没有想到装完Nginx + PHP + MySQL 启动nginx 服务,出现页面: 如果访问120.25.216.6/index.php 就会变成下载 之所以会这样是因为2个原因 ...

  5. Jmeter之随机变量元件与用户自定义变量元件区别及使用

    用随机变量(random variable)与用户自定义变量(User defined variables)的区别: 随机变量:在同个线程或者不同线程时,每个次循环执行时值都会重新生成 用户自定义变量 ...

  6. MasaFramework -- i18n (国际化)

    概念 作为一个普通开发者, 我们负责的项目的使用群体大多数是本国的人民, 但不可避免的也有一些做外贸的业务或者给外企做的项目, 这个时候就要求我们的项目有服务全球客户的能力, 而一个支持国际化能力的框 ...

  7. python之路38 SQL注入问题 索引触发器 事务 存储过程 函数 流程控制

    SQL注入问题 怪像1:输对用户名就可以登录成功 怪像2:不需要对的用户名和密码也可以登录成功 SQL注入:利用特殊符号的组合产生特殊的含义 从而避开正常的业务逻辑 select * from use ...

  8. react,vue中的key有什么作用?(key的内部原理)

    1.虚拟DOM中的key的作用: key是虚拟dom对象的标识,当状态中的数据发生变化时,vue会根据新数据生成新的虚拟dom,随后vue进行新的虚拟dom与旧的虚拟dom的差异比较. 2.比较规则 ...

  9. nodejs 升级后, vue+webpack 项目 node-sass 报错的解决方法

    1.npm i node-sass -D 在错误提示里有给出了方案,重新构建 node-sass,命令如下: npm rebuild node-sass --force 如果执行完成后不报错,就可以了 ...

  10. springcloud与微服务

    springcloud 与 微服务 父工程(按需导入依赖) <!--打包--> <packaging>pom</packaging> <properties& ...