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$
题解:
这种跳步数问题可以用根号分治来解决:
对于 $k$ 比较大的询问直接暴力跳,而对于 $k$ 较小的部分就通过预处理的手段来做.
我们现在只考虑 $k<\sqrt n$ 的情况,即需要我们预处理的部分.
如果直接维护 $f[i][j]$ 表示从 $i$ 开始以 $j$ 的步伐跳到 $n$ 所能得到的点权和的话空间根本开不下.
但是询问不是强制在线的,我们可以采用离线+滚动数组的方式来处理.
具体地,我们将这个序列分块,对于块内元素维护 $(i,pos,t)$ 即在第 $i$ 个块中第 $pos$ 个位置开始以 $t$ 的步伐条的元素和.
倒着枚举询问,我们就可以将第一维 $i$ 压掉,然后倒着处理并滚动优化一下即可.
#include <bits/stdc++.h>
#define M 550
#define N 300005
#define ll long long
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
int n,m,B;
ll f[M][M],A[N],output[N];
struct query
{
int id,k;
query(int id=0,int k=0):id(id),k(k){}
};
struct Data
{
int id,pos;
vector<query>v;
}p[N];
int main()
{
int i,j;
// setIO("input");
scanf("%d",&n);
B=sqrt(n);
for(i=1;i<=n;++i)
{
scanf("%lld",&A[i]);
p[i].id=(i-1)/B+1;
if(p[i].id!=p[i-1].id) p[i].pos=1;
else p[i].pos=p[i-1].pos+1;
}
scanf("%d",&m);
for(i=1;i<=m;++i)
{
int a,b;
scanf("%d%d",&a,&b);
if(b<B) p[a].v.push_back(query(i, b));
else
{
ll re=0;
for(j=a;j<=n;j+=b) re+=A[j];
output[i]=re;
}
}
for(i=n;i>=1;--i)
{
int cur=p[i].pos;
for(j=1;j<B;++j)
{
f[p[i].pos][j]=A[i];
if(i+j<=n)
{
f[p[i].pos][j]+=f[p[i+j].pos][j];
}
}
for(j=0;j<p[i].v.size();++j)
{
output[p[i].v[j].id]=f[p[i].pos][p[i].v[j].k];
}
}
for(i=1;i<=m;++i) printf("%lld\n",output[i]);
return 0;
}
CF103D Time to Raid Cowavans 根号分治+离线的更多相关文章
- 题解【CF103D Time to Raid Cowavans】
Description 给一个序列 \(a\) ,\(m\) 次询问,每次询问给出 \(t, k\) .求 \(a_t + a_{t+k}+a_{t+2k}+\cdots+a_{t+pk}\) 其中 ...
- 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 ...
- Codeforces103D - Time to Raid Cowavans
Portal Description 给出长度为\(n(n\leq3\times10^5)\)的序列\(\{a_n\}\),进行\(q(q\leq3\times10^5)\)次询问:给出\(x,y\) ...
- BZOJ.4320.[ShangHai2006]Homework(根号分治 分块)
BZOJ \(\mathbb{mod}\)一个数\(y\)的最小值,可以考虑枚举剩余系,也就是枚举区间\([0,y),[y,2y),[2y,3y)...\)中的最小值(求后缀最小值也一样)更新答案,复 ...
- CF1039E Summer Oenothera Exhibition 贪心、根号分治、倍增、ST表
传送门 感谢这一篇博客的指导(Orzwxh) $PS$:默认数组下标为$1$到$N$ 首先很明显的贪心:每一次都选择尽可能长的区间 不妨设$d_i$表示在取当前$K$的情况下,左端点为$i$的所有满足 ...
- CF1039E Summer Oenothera Exhibition 根号分治,LCT,ST表
CF1039E Summer Oenothera Exhibition LG传送门 根号分治好题. 可以先看我的根号分治总结. 题意就是给出长度为\(n\)的区间和\(q\)组询问以及一个\(w\), ...
- CodeForces 103 D Time to Raid Cowavans
Time to Raid Cowavans 题意:一共有n头牛, 每头牛有一个重量,m次询问, 每次询问有a,b 求出 a,a+b,a+2b的牛的重量和. 题解:对于m次询问,b>sqrt(n) ...
- Codeforces 1039D You Are Given a Tree [根号分治,整体二分,贪心]
洛谷 Codeforces 根号分治真是妙啊. 思路 考虑对于单独的一个\(k\)如何计算答案. 与"赛道修建"非常相似,但那题要求边,这题要求点,所以更加简单. 在每一个点贪心地 ...
- BZOJ3351: [ioi2009]Regions(根号分治)
题意 题目链接 Sol 很神仙的题 我们考虑询问(a, b)(a是b的祖先),直接对b根号分治 如果b的出现次数\(< \sqrt{n}\),我们可以直接对每个b记录下与它有关的询问,这样每个询 ...
随机推荐
- Python笔记day20-面向对象
目录 面向对象 1 装饰器 1.1 装饰器是什么? 1.2 装饰器 2 面向对象 (Object Oriented) 简称OO 2.1 面向对象相关术语 2.2 类和对象 2.3 类和对象的实现和书写 ...
- 1264: 祈雨(Java)
WUSTOJ 1264: 祈雨 Description 在持续了X天的干旱之后,ACM俱乐部决定由LCM去请求雨大师XH祈雨,CMS则准备工具收集雨水,由于ACM俱乐部中有一个逆天的存在,BobLee ...
- 【数据结构】P1165 日志分析
题目描述 MM 海运公司最近要对旗下仓库的货物进出情况进行统计.目前他们所拥有的唯一记录就是一个记录集装箱进出情况的日志.该日志记录了两类操作:第一类操作为集装箱入库操作,以及该次入库的集装箱重量:第 ...
- 解决GitHub下载慢问题,不用修改HOSTS文件
写这篇文章缘由是我用的一款Github上的软件软件版本更新,想去Github上下载新的版本,结果下载速度居然只有几k,还老是下载失败,然后去修改HOSTS文件(我看文章基本都是叫修改这个),修改完成后 ...
- Java QuickSort 快速排序
Java QuickSort /** * <html> * <body> * <P> Copyright 1994-2018 JasonInternational ...
- WebSocket协议探究(二)
一 复习和目标 1 复习 协议概述: WebSocket内置消息定界并且全双工通信 WebSocket使用HTTP进行协议协商,协商成功使用TCP连接进行传输数据 WebScoket数据格式支持二进制 ...
- POJ1065(Wooden Sticks)--贪心
木棍 时间限制: 1000MS 内存限制: 10000K 提交总数: 27336 接受: 11857 描述 有一堆木棍.每根杆的长度和重量是预先已知的.这些木棍将由木工机器逐一加工.它需要一些 ...
- 如何用HAProxy+Nginx实现负载均衡
一.什么是HAProxy HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的web站点, ...
- Dell T30解决报Alert! Cover was previously removed.
DELL T30自检中卡在F1/F2/F5选项,需要F1手动启动时报:Alert! Cover was previously removed是指向机器盖问题 [解决方法]: 1.检查机箱盖是否有盖紧 ...
- Java 基础 面向对象: 接口(interface )概念 以及接口之练习3 -定义一个接口用来实现两个对象的比较并 判断instanceof是否为同类
接口(interface )概念概念笔记 及测试代码: /** 面向对象: 接口(interface ) 是与类并行的一个概念: * 1.接口可以看成一个特殊的抽象类,它是常量与抽象方法的一个集合 * ...