#include <bits/stdc++.h>
using namespace std;
typedef long long lint;
const int N=300010;
const int U=64;
int n,unit,p[N],m;
struct Q
{
int fir,len;
int id;
}q[N];
lint res;
lint ans[N],LenAns[N];
inline int read(void)
{
int s=0; char c=getchar();
for (;!isdigit(c);c=getchar());
for (;isdigit(c);c=getchar()) s=s*10+c-'0';
return s;
}
inline int cmp(Q qa,Q qb)
{
return qa.len<qb.len;
}
int main(void)
{
n=read();
for (int i=1;i<=n;i++) p[i]=read();
unit=(int)sqrt(n);
m=read();
for (int i=1;i<=m;i++) q[i].fir=read(),q[i].len=read(),q[i].id=i;
sort(q+1,q+m+1,cmp);
for (int i=1;i<=m;i++)
if (q[i].len>unit)
{
res=0;
for (int j=q[i].fir;j<=n;j+=q[i].len) res+=p[j];
ans[q[i].id]=res;
}
else
{
if (q[i].len!=q[i-1].len)
{
for (int j=n;j>=n-q[i].len+1;j--) LenAns[j]=p[j];
for (int j=n-q[i].len;j>=1;j--) LenAns[j]=LenAns[j+q[i].len]+p[j];
}
ans[q[i].id]=LenAns[q[i].fir];
}
for (int i=1;i<=m;i++) printf("%I64d\n",ans[i]);
return 0;
}
【CodeForces】80D Time to Raid Cowavans 分塊
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.