Description

给一个序列 \(a\) ,\(m\) 次询问,每次询问给出 \(t, k\) 。求 \(a_t + a_{t+k}+a_{t+2k}+\cdots+a_{t+pk}\) 其中 \(t+pk \leq n\) 且 \(t+(p+1)k > n\)

\(n,m \leq 300000,a_i \leq 10^9\)

Solution

对 \(k\) 即公差分块。设定一个 \(T\) 。

当 \(k > T\) 时,直接暴力算。复杂度 \(O(\frac{n}{T})\);

当 \(k \le T\) 时,对于 \(k\) 建立一个后缀和数组 \(sum\)。\(sum_i\) 表示从 \(n\) 开始往前这么跳公差 \(k\) 跳到 \(i\) 的和。它可以倒着遍历用 \(sum_i = sum_{i+k} + a_i\) 更新。复杂度 \(O(n)\)

取 \(T = \sqrt n\) 则可以预处理出所有小于 \(T\) 的 \(k\) 的 sum。复杂度 \(O(n \sqrt n)\)

但这样空间爆炸(MLE)所以开一个 sum 数组,把询问按照 \(k\) 从小到大排序。每次若 \(k>T\) 暴力;\(k \leq T\) 时重新更新 sum。由于询问中最多有 \(T\) 个不同的数 \(\leq T\)(废话) 所以更新的复杂度不会超过 \(n \sqrt n\)

所以总时间复杂度是 \(O(n \log n + n \sqrt n)\)

Code

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 300100;
int n, m, a[N];
ll sum[N], Ans[N];
struct node {
int t, k, id;
} Q[N];
inline bool cmp(node x, node y) {
return x.k == y.k ? x.t > y.t : x.k < y.k;
}
int main() {
scanf("%d", &n);
for(int i = 1; i <= n; i++)
scanf("%d", &a[i]);
int T = floor(sqrt(n));
scanf("%d", &m);
for(int i = 1; i <= m; i++) {
scanf("%d %d", &Q[i].t, &Q[i].k);
Q[i].id = i;
} sort(Q + 1, Q + m + 1, cmp); int last = n;
for(int i = 1; i <= m; i++) {
ll ans = 0;
if(Q[i].k >= T) {
for(int j = Q[i].t; j <= n; j += Q[i].k)
ans += a[j];
} else { int k = Q[i].k, t = Q[i].t;
if(Q[i].k != Q[i - 1].k) last = n;
for(int j = last; j >= t; j--) {
sum[j] = a[j];
if(j + k <= n) sum[j] += sum[j + k];
}
last = t - 1; ans = sum[t];
} Ans[Q[i].id] = ans;
}
for(int i = 1; i <= m; i++) printf("%lld\n", Ans[i]);
return 0;
}

题解【CF103D Time to Raid Cowavans】的更多相关文章

  1. CF103D Time to Raid Cowavans 根号分治+离线

    题意: 给定序列 $a,m$ 次询问,每次询问给出 $t,k$. 求 $a_{t}+a_{t+k}+a_{t+2k}+.....a_{t+pk}$ 其中 $t+(p+1)k>n$ 题解: 这种跳 ...

  2. Codeforces Beta Round #80 (Div. 1 Only) D. Time to Raid Cowavans 离线+分块

    题目链接: http://codeforces.com/contest/103/problem/D D. Time to Raid Cowavans time limit per test:4 sec ...

  3. CodeForces 103D Time to Raid Cowavans 询问分块

    Time to Raid Cowavans 题意: 询问 下标满足 a + b * k 的和是多少. 题解: 将询问分块. 将b >= blo直接算出答案. 否则存下来. 存下来之后,对于每个b ...

  4. CodeForces 103 D Time to Raid Cowavans

    Time to Raid Cowavans 题意:一共有n头牛, 每头牛有一个重量,m次询问, 每次询问有a,b 求出 a,a+b,a+2b的牛的重量和. 题解:对于m次询问,b>sqrt(n) ...

  5. Codeforces103D - Time to Raid Cowavans

    Portal Description 给出长度为\(n(n\leq3\times10^5)\)的序列\(\{a_n\}\),进行\(q(q\leq3\times10^5)\)次询问:给出\(x,y\) ...

  6. 【CF103D】Time to Raid Cowavans(分块)

    题意: 思路:院赛防AK题,然而还没来得及做就被数据出锅的题坑了…… #include<cstdio> #include<cstring> #include<string ...

  7. Codeforces Beta Round #80 (Div. 1 Only) D. Time to Raid Cowavans 分块

    D. Turtles Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/103/problem/D ...

  8. CodeForces - 103D Time to Raid Cowavans

    Discription As you know, the most intelligent beings on the Earth are, of course, cows. This conclus ...

  9. (分块暴力)Time to Raid Cowavans CodeForces - 103D

    题意 给你一段长度为n(1 ≤ n ≤ 3·1e5)的序列,m (1 ≤ p ≤ 3·1e5)个询问,每次询问a,a+b,a+2b+...<=n的和 思路 一开始一直想也想不到怎么分,去维护哪些 ...

随机推荐

  1. Windows搭建python开发环境

    python你不去认识它,可能没什么,一旦你认识了它,你就会爱上它 基本概念Python(英语发音:/ˈpaɪθən/), 是一种面向对象.解释型计算机程序设计语言,由Guido van Rossum ...

  2. 导出excel失败,提示提示加载类型库/DDL出错

    首先,这里提供的解决办法仅适用于出现如下异常的情况:无法将类型为“Microsoft.Office.Interop.Excel.ApplicationClass”的 COM 对象强制转换为接口类型“M ...

  3. 团队博客作业Week1 --- 团队成员简介

    团队博客作业Week1 团队作业1 我们团队是一个以功能团队模式组建而成的团队,我们总共有5位队员,分别是:李剑锋.陈谋.卢惠明.潘成鼎.仉伯龙. 中间的那位就是李剑锋,我们的PM(项目经理).性格热 ...

  4. 实验三— —敏捷开发与XP实践

    ---恢复内容开始--- java的第二个实验——JAVA面向对象程序设计 北京电子科技学院 实     验    报     告 课程:Java程序设计 班级:1352 姓名:林涵锦 学号:2013 ...

  5. C++:new&delete

    一.new的浅析 在C++中,new主要由三种形式:new operator.operator new和placement new • new operator new operator即一些C++书 ...

  6. xml命名空间

    https://yq.aliyun.com/articles/40353 ************************************* 摘要: 相信很多人和我一样,在编写Spring或者 ...

  7. SpringMVC(四)-- springmvc的系统学习之文件上传、ajax&json处理

    资源:尚学堂 邹波 springmvc框架视频 一.文件上传 1.步骤: (1)导入jar包 commons-fileupload,commons-io (2)在springmvc的配置文件中配置解析 ...

  8. Virtualbox+Ubuntu安装,VERR_VMX_MSR_ALL_VMX_DISABLED解决

    学习链接:基于VirtualBox虚拟机安装Ubuntu图文教程--娄老师 启动虚拟机遇到的问题:BIOS中VT-x在所有CPU模式下被禁用(VERR_VMX_MSR_ALL_VMX_DISABLED ...

  9. 结对作业-四则运算GUI

    目录: 一.项目地址二.PSP三.接口设计四.计算模块接口的设计与实现过程五.计算模块接口部分的性能改进六.计算模块部分单元测试展示七.计算模块部分异常处理说明八.界面模块的详细设计过程九.界面模块与 ...

  10. 结对项目-小学生四则运算系统(GUI)

    Coding克隆地址:https://git.coding.net/FrrLolix/CalGUI.git 伙伴博客:http://www.cnblogs.com/wangyy39/p/8763244 ...