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 secondsmemory limit per test:70 megabytes
#### 问题描述
> As you know, the most intelligent beings on the Earth are, of course, cows. This conclusion was reached long ago by the Martian aliens, as well as a number of other intelligent civilizations from outer space.
>
> Sometimes cows gather into cowavans. This seems to be seasonal. But at this time the cows become passive and react poorly to external stimuli. A cowavan is a perfect target for the Martian scientific saucer, it's time for large-scale abductions, or, as the Martians say, raids. Simply put, a cowavan is a set of cows in a row.
>
> If we number all cows in the cowavan with positive integers from 1 to n, then we can formalize the popular model of abduction, known as the (a, b)-Cowavan Raid: first they steal a cow number a, then number a + b, then — number a + 2·b, and so on, until the number of an abducted cow exceeds n. During one raid the cows are not renumbered.
>
> The aliens would be happy to place all the cows on board of their hospitable ship, but unfortunately, the amount of cargo space is very, very limited. The researchers, knowing the mass of each cow in the cowavan, made p scenarios of the (a, b)-raid. Now they want to identify the following thing for each scenario individually: what total mass of pure beef will get on board of the ship. All the scenarios are independent, in the process of performing the calculations the cows are not being stolen.
#### 输入
> The first line contains the only positive integer n (1 ≤ n ≤ 3·105) — the number of cows in the cowavan.
>
> The second number contains n positive integer wi, separated by spaces, where the i-th number describes the mass of the i-th cow in the cowavan (1 ≤ wi ≤ 109).
>
> The third line contains the only positive integer p — the number of scenarios of (a, b)-raids (1 ≤ p ≤ 3·105).
>
> Each following line contains integer parameters a and b of the corresponding scenario (1 ≤ a, b ≤ n).
#### 输出
> Print for each scenario of the (a, b)-raid the total mass of cows, that can be stolen using only this scenario.
>
> Please, do not use the %lld specificator to read or write 64-bit integers in С++. It is recommended to use the cin, cout streams of the %I64d specificator.
#### 样例
> **sample input**
> 4
> 2 3 5 7
> 3
> 1 3
> 2 3
> 2 2
>
> **sample output**
> 9
> 3
> 10
题意
给你n个数字的数组arr[],q个查询,对每个查询a,b,求数列和sigma(arr[a]+arr[a+b]+...)。
题解
这里用到了分块的思想:
如果所有的b都不相同你直接暴力也是可以做出来的(每次都按定义求和就好了),为什么呢,因为对于b>=sqrt(n)的,我们每次求和的时间<=sqrt(n),时间复杂度为q1 * sqrt(n);而对于小于等于sqrt(n)的b最多只有sqrt(n)个,我们每个查询求和最大的时间为o(n),时间复杂度为O(n * sqrt(n))。
如果很多b相同怎么办?首先,如果b>=sqrt(n),我们完全可以暴力做,所以我们只要考虑很多b相同并且b<sqrt(n)的情况。我们可以考虑离线处理,把相同的b都集中在一起,对所有相同的b我们只要O(n)处理一次步长为b的前缀和就可以了,这样,我们处理b<=sqrt(n)的情况就有能控制在O(n*sqrt(n))了。
代码
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
#define X first
#define Y second
#define mkp make_pair
using namespace std;
typedef __int64 LL;
const int maxn = 3e5 + 10;
struct Node {
int id, a, b;
LL ans;
bool operator < (const Node& tmp) const {
return id < tmp.id;
}
}que[maxn];
bool cmp(const Node& n1, const Node& n2) {
return n1.b < n2.b;
}
LL arr[maxn];
int n, q;
LL sumv[maxn];
int len;
LL solve(int a, int b) {
if (b == len) {
return sumv[a];
}
else {
for (int i = n; i >= 1; i--) {
if (i + b > n) {
sumv[i] = arr[i];
}
else {
sumv[i] = arr[i] + sumv[i + b];
}
}
len = b;
return sumv[a];
}
}
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%I64d", &arr[i]);
}
scanf("%d", &q);
for (int i = 0; i < q; i++) {
int a, b;
scanf("%d%d", &que[i].a, &que[i].b);
que[i].id = i;
}
sort(que, que + q, cmp);
len = -1;
for (int i = 0; i < q; i++) {
int a = que[i].a, b = que[i].b;
LL ans = 0;
if (b < sqrt(n)) {
ans = solve(a, b);
}
else {
for (int i = a; i <= n; i += b) {
ans += arr[i];
}
}
que[i].ans = ans;
}
sort(que, que + q);
for (int i = 0; i < q; i++) {
printf("%I64d\n", que[i].ans);
}
return 0;
}
Codeforces Beta Round #80 (Div. 1 Only) D. Time to Raid Cowavans 离线+分块的更多相关文章
- 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 ...
- Codeforces Beta Round #80 (Div. 2 Only)【ABCD】
Codeforces Beta Round #80 (Div. 2 Only) A Blackjack1 题意 一共52张扑克,A代表1或者11,2-10表示自己的数字,其他都表示10 现在你已经有一 ...
- 分治思想 特别常用 Codeforces Beta Round #80 (Div. 1 Only) D
D. Time to Raid Cowavans time limit per test 4 seconds memory limit per test 70 megabytes input stan ...
- Codeforces Beta Round #69 (Div. 2 Only)
Codeforces Beta Round #69 (Div. 2 Only) http://codeforces.com/contest/80 A #include<bits/stdc++.h ...
- Codeforces Beta Round #83 (Div. 1 Only)题解【ABCD】
Codeforces Beta Round #83 (Div. 1 Only) A. Dorm Water Supply 题意 给你一个n点m边的图,保证每个点的入度和出度最多为1 如果这个点入度为0 ...
- Codeforces Beta Round #79 (Div. 2 Only)
Codeforces Beta Round #79 (Div. 2 Only) http://codeforces.com/contest/102 A #include<bits/stdc++. ...
- Codeforces Beta Round #77 (Div. 2 Only)
Codeforces Beta Round #77 (Div. 2 Only) http://codeforces.com/contest/96 A #include<bits/stdc++.h ...
- Codeforces Beta Round #76 (Div. 2 Only)
Codeforces Beta Round #76 (Div. 2 Only) http://codeforces.com/contest/94 A #include<bits/stdc++.h ...
- Codeforces Beta Round #75 (Div. 2 Only)
Codeforces Beta Round #75 (Div. 2 Only) http://codeforces.com/contest/92 A #include<iostream> ...
随机推荐
- VS2008无法切换到视图设计器
编写人:CC阿爸 2014-2-17 近来用于干活的笔记本电脑实在太慢了,在领导的安排下,有幸更换了一台配置好的电脑.经过一天的努力,所有之前的开发软件都安装完成了.并且OS从xp升级到win7.SQ ...
- 14 个折磨人的 JavaScript 面试题
前端工程师有时候面试时会遇到一类面试官,他们问的问题对于语言本身非常较真儿,往往不是候选人可能期待的面向实际的问题(有些候选人强调能干活就行,至于知不知道其中缘由是无关痛痒的).这类题目,虽然没有逻辑 ...
- php读取excel文件 更新修改excel
php读取excel文件示例,还有更新修改功能. 代码: //模板存放目录 $dir = $DOCUMENT_ROOT.'/backoffice/admin/oemcheck/'; $template ...
- java中4中类修饰符访问范围
public:本类中可见,同包中可见,子类中可见,其他包中可见. protected:本类中可见,同包中可见,子类中可见,其他包不可见. 默认:本类中可见,同包中可见,子类不可见,其他包不可见. pr ...
- FireFox Prevent this page from creating addtional dialogs 火狐浏览器 设置 阻止此页面创建更多对话框
FireFox英文版本老弹出“Prevent this page from creating addtional dialogs”的确认框 FireFox english version alert ...
- Delphi 2010初体验,是时候抛弃Delphi 7了
Delphi 2010已于近日由Embarcadero公司发布.作者Kim Madsen作为一名资深的Delphi开发者,在他的博客中谈到了Delphi 2010的新性能.它的使用感受以及对Delph ...
- javascript arguments
此文为转载文章: 什么是arguments arguments 是是JavaScript里的一个内置对象,它很古怪,也经常被人所忽视,但实际上是很重要的.所有主要的js函数库都利用了arguments ...
- 算法系列7《CVN》
计算CVN时使用二个64位的验证密钥,KeyA和KeyB. 1) 计算CVN 的数据源包括: 主账号(PAN).卡失效期和服务代码,从左至右顺序编排. 4123456789012345+8701+11 ...
- quartz集群调度机制调研及源码分析---转载
quartz2.2.1集群调度机制调研及源码分析引言quartz集群架构调度器实例化调度过程触发器的获取触发trigger:Job执行过程:总结:附: 引言 quratz是目前最为成熟,使用最广泛的j ...
- poj 3625 Building Roads
题目连接 http://poj.org/problem?id=3625 Building Roads Description Farmer John had just acquired several ...