考虑一个贪心。

我们一定采取的方案是

\(b_i = \min_{j = i - k}^i a_j\)

\(\sum a_l + b_{l + k} + \min_{i = 1}^2{b_{l + ik}} + \min_{i = 1}^3{b_{l + ik}}......\min_{i = 1}^t{b_{l + ik}}\)

那么我们看出来可以只考虑同余系的关键点即可。

但是我们发现我们不好计算答案。

一个想要的考虑是扫描线。

但是我们发现这样需要支持区间加,区间取 \(0\),区间加等差数列,单点查。

然后我发现我不会区间加等差数列,所以只能考虑正解做法。

考虑我们差分答案,记\(f_i\)为一直到结尾的答案,考虑倒序枚举\(i\),直接单调栈,其转移显然。

那么\([l,r]\)答案应为\(f_i - f_p + b_p * {(r - p + 1)} + a_l\)

\(p\)为\([l,r]\)中最小值位置。

考虑笛卡尔树上的\([l,r]\)的最小值位置即其两点\(LCA\)位置。

那么复杂度为\(O(nlog{\frac{n}{k}} + q)\)

较正解做法\(O(nlog + q)\) 效率应该差距不大。

所以这里采用正解做法即ST表。

#include<bits/stdc++.h>
#define ll long long
#define N 600005
#define int ll int n,q,k; std::pair<int,int> g[N][30];//ST表 int lg[N],b[N]; std::pair<int,int> get(int l,int r){
if(l > r)
return std::pair<int,int>(0,0);
int p = lg[r - l + 1];
return std::min(g[l][p],g[r - (1ll << p) + 1][p]);
} int stk[N],top,nxt[N],f[N]; ll calc(int l,int r){
int p = get(l - k,r).second;
int tmp = g[p][0].first;
if(p == l - k)
p += k;
p = p + (r - p) % k;
return f[l] - f[p] + (r / k - p / k + 1) * b[p];
} signed main(){
scanf("%d%d%d",&n,&q,&k);
lg[0] = -1;
for(int i = 1;i <= n;++i)
lg[i] = lg[i / 2] + 1;
for(int i = 1;i <= n;++i){
scanf("%d",&g[i][0].first);
g[i][0].second = i;
}
for(int j = 1;j <= 20;++j)
for(int i = 1;i + (1ll << j) - 1 <= n;++i)
g[i][j] = std::min(g[i][j - 1],g[i + (1ll << (j - 1))][j - 1]);
for(int i = k + 1;i <= n;++i)
b[i] = get(i - k,i).first;
for(int l = k + 1;l + k <= n && l <= 2 * k;++l){
int r = l + (n - l) / k * k;
top = 1;
for(int i = r;i >= l;i -= k){
while(top > 1 && b[i] <= b[stk[top]])
top -- ;
nxt[i] = stk[top];
f[i] = f[nxt[i]] + b[i] * (nxt[i] / k - i / k);
stk[++top] = i;
}
}
while(q -- ){
int l,r;
scanf("%d%d",&l,&r);
r = l + (r - l) / k * k;
std::cout<<(1ll * g[l][0].first + 1ll * (l + k <= r? calc(l + k,r) : 0))<<std::endl;
}
}

CF1601E Phys Ed Online的更多相关文章

  1. 贪心/构造/DP 杂题选做Ⅲ

    颓!颓!颓!(bushi 前传: 贪心/构造/DP 杂题选做 贪心/构造/DP 杂题选做Ⅱ 51. CF758E Broken Tree 讲个笑话,这道题是 11.3 模拟赛的 T2,模拟赛里那道题的 ...

  2. EDdb 是ED数据

    eddb  是ED数据统计汇总软件的简称,用于统计汇总企事业单位的各类信息数据. 采用Excel界面,操作简单. 对各类信息数据,均可以自定义数据格式,通过internet联网,收集各类信息数据,并通 ...

  3. ios CoreBluetooth 警告 is being dealloc'ed while pending connection

    ios CoreBluetooth 警告 is being dealloc'ed while pending connection CoreBluetooth[WARNING] <CBPerip ...

  4. ed编辑器使用

    evilxr@IdeaPad:/tmp$ ed aa.c 0 a enter another words hello nice www.evilxr.com . w aa.c 46 q a 表示添加内 ...

  5. Linux ed命令

    $ ed              <- 激活 ed 命令  a                 <- 告诉 ed 我要编辑新文件  My name is Titan. <- 输入第 ...

  6. ED/EP系列5《消费指令》

    1. 消费交易 消费交易允许持卡人使用电子存折或电子钱包的余额进行购物或获取服务. 特点: 1) --可以在销售点终端(POS)上脱机进行 2) --使用电子存折进行的消费交易必须提交个人识别码(PI ...

  7. ED/EP系列4《圈存指令》

    1. 圈存交易 通过圈存交易,持卡人可将其在银行相应账户上的资金划入电子存折或电子钱包中. 特点: 1)--必须在金融终端上联机进行; 2)--必须提交个人识别码(PIN) 步骤: 1) --终端: ...

  8. ED/EP系列1《简介》

    电子存折(ED:ElectronicDeposit)一种为持卡人进行消费.取现等交易而设计的支持个人识别码(PIN)保护的金融IC卡应用.它支持圈存.圈提.消费和取现等交易. 电子钱包(EP:Elec ...

  9. ED/EP简介

    ED:electronic Deposit,电子存折 EP:electronic Purse,电子钱包 PIN:personal identification number,个人识别码 MAC:Mes ...

随机推荐

  1. Python ThreadPoolExecutor 线程池导致内存暴涨

    背景 在有200W的任务需要取抓取的时候,目前采用的是线程池去抓取,最终导致内存暴涨. 原因 Threadpoolexcutor默认使用的是无界队列,如果消费任务的速度低于生产任务,那么会把生产任务无 ...

  2. Java(35)IO特殊操作流&Properties集合

    作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15228454.html 博客主页:https://www.cnblogs.com/testero ...

  3. 手摸手教你用 yapi-to-typescript生成Yapi的TypeScript数据类型

    一 背景 现代社会比较重视效率,本着这个思想宗旨,能用工具自动高效做的事情,就不要低质量的勤奋.yapi-to-typescript就是一款自动生成接口请求与响应的typescript数据类型定义的工 ...

  4. g++ 常用命令

    g++ --help

  5. Win10 配置JDK1.8 (JDK 8)环境变量

    JDK的安装: 1. JDK安装过程中,一般X掉公共JRE,因为JDK包含了JRE:     环境变量的配置: 1. 打开环境变量,编辑系统变量,新建: 变量名:JAVA_HOME 变量值:D:\so ...

  6. SpringBoot打包到docker(idea+传统方式)

    作者:故事我忘了¢个人微信公众号:程序猿的月光宝盒 目录 1. 方式1.通过idea 远程发布 1.1 修改docker.service文件 1. 进入服务器 2. 修改ExecStart行为下面内容 ...

  7. 数据结构与算法-基础(十一)AVL 树

    AVL 树 是最早时期发明的自平衡二叉搜索树之一.是依据它的两位发明者的名称命名. AVL 树有一个重要的属性,即平衡因子(Balance Factor),平衡因子 == 某个节点的左右子树高度差. ...

  8. Apache Zookeeper Java客户端Curator使用及权限模式详解

    这篇文章是让大家了解Zookeeper基于Java客户端Curator的基本操作,以及如何使用Zookeeper解决实际问题. Zookeeper基于Java访问 针对zookeeper,比较常用的J ...

  9. Beta阶段第九次会议

    Beta阶段第九次会议 时间:2020.5.25 完成工作 姓名 完成工作 任务难度 完成度 ltx 1.发现小程序身份认证bug和新闻列表获取bug2.修改新增页面风格 轻 90% xyq 1.修改 ...

  10. [no_code][Alpha]测试报告

    项目 内容 2020春季计算机学院软件工程(罗杰 任健) 2020春季计算机学院软件工程(罗杰 任健) 作业要求 测试报告 我们在这个课程的目标是 设计出一个OCR表单处理软件 这个作业在哪个具体方面 ...