Cogs 1695. 梦游仙境(分块)
- 梦游仙境
★☆ 输入文件:XTTMYXJ.in 输出文件:XTTMYXJ.out 简单对比
时间限制:5 s 内存限制:512 MB
【题目描述】
在Asm.def仍然在与人工智能进行艰苦的斗争时,雪甜甜小公主仍然在亚特兰蒂斯里自娱自乐,她不小心误闯了玛丽奥的世界。
她感觉十分有趣,她闯关到了一行有n个小块上面有傻币的地面(可以看成一个数轴),地面上有许多,假如雪甜甜的起点为l,终点为r,跳跃能力为jump,从左往右跳
针对雪甜甜皇家公主给出的q组询问l,r,jump,你需要计算他获得的傻币数
例如下面这种情况
地面的金币数列:
2 1 4 7 4 1 2 5 1
w[1] w[2] w[3] w[4] w[5] w[6] w[7] w[8] w[9]
若l=2,r=7,jump=3,则总傻币数为w[2]+w[5]=5(w[8]不算,因为雪甜甜跳不到)
若l=3,r=4,jump=2,则总傻币数为w[3]=4(没法跳,只能留在原地)
【输入格式】
第一行为两个整数n,q
第二行n个数,表示w[i]
接下来q行每行三个数l,r,jump
【输出格式】
总共q行,每行一个答案ans
【样例输入】
10 5
2 1 4 7 4 8 3 6 4 7
1 10 233333
4 7 666666
2 10 2
1 9 4
3 5 3
【样例输出】
2
7
29
10
4
【提示】
对于30%的数据,n<=2000
对于100%的数据,n<=100000,q<=500000
/*
本蒟蒻做的第一道分块题.
一开始没想到怎么分.
大概就是对于jump值>sqrt(n)的询问暴力处理.
对于jump值<=sqrt(n)的询问做一个预处理.
sum[i][j]表示跳i次,编号(重新编号)为j的点的前缀答案贡献.
查询的时候我们保证了跳跃起点相同的点的编号是连续的
而且查询的[l,r]有贡献的两个端点必定是同一起跳起点跳过来的.
so 前缀和直接相减就可以.
复杂度O(q√n).
*/
#include<iostream>
#include<cstdio>
#include<cmath>
#define MAXN 100001
#define MAXM 320
#define LL long long
using namespace std;
int n,m,K,a[MAXN],s[MAXM][MAXN],g[MAXM][MAXN];
LL sum[MAXM][MAXN];
int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
return x*f;
}
void pre()
{
int pos;
for(int i=1;i<=K;i++)//枚举跳的长度.
{
pos=0;
for(int j=1;j<=i;j++)//枚举跳的起点(显然共有i种情况).
for(int k=j;k<=n;k+=i)//跳.
{
g[i][k]=++pos;
s[i][pos]=a[k];
}
for(int j=1;j<=n;j++) sum[i][j]=sum[i][j-1]+(LL)s[i][j];
}
}
LL slove1(int l,int r,int jump)
{
LL tot=0;
for(int i=l;i<=r;i+=jump) tot+=a[i];
return tot;
}
LL slove2(int l,int r,int jump)
{
int ll=l,rr=r-(r-l)%jump;
if(!jump||ll>=rr) return a[ll];
ll=g[jump][ll],rr=g[jump][rr];
return sum[jump][rr]-sum[jump][ll-1];
}
int main()
{
freopen("XTTMYXJ.in","r",stdin);
freopen("XTTMYXJ.out","w",stdout);
int x,y,z;
n=read(),m=read();K=sqrt(n);
for(int i=1;i<=n;i++) a[i]=read();
pre();
while(m--)
{
x=read(),y=read(),z=read();
if(z>K) printf("%lld\n",slove1(x,y,z));
else printf("%lld\n",slove2(x,y,z));
}
return 0;
}
Cogs 1695. 梦游仙境(分块)的更多相关文章
- E - 娜娜梦游仙境系列——莫名其妙的插曲
E - 娜娜梦游仙境系列——莫名其妙的插曲 E - 娜娜梦游仙境系列——莫名其妙的插曲 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 1 ...
- B - 娜娜梦游仙境系列——跳远女王
B - 娜娜梦游仙境系列——跳远女王 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Other ...
- G - 娜娜梦游仙境系列——梦醒
G - 娜娜梦游仙境系列——梦醒 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) ...
- F - 娜娜梦游仙境系列——多民族王国
F - 娜娜梦游仙境系列——多民族王国 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Othe ...
- D - 娜娜梦游仙境系列——村民的怪癖
D - 娜娜梦游仙境系列——村民的怪癖 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Othe ...
- C - 娜娜梦游仙境系列——吃不完的糖果
C - 娜娜梦游仙境系列——吃不完的糖果 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Oth ...
- A - 娜娜梦游仙境系列——诡异的钢琴
A - 娜娜梦游仙境系列——诡异的钢琴 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Othe ...
- acdream 1684 娜娜梦游仙境系列——莫名其妙的插曲 (gcd)
题意:一开始有一个集合,集合里有n个不同的数,然后Alice(娜娜)与Bob轮流进行操作,每人都可以任意选择两个数a,b,不妨设a>b,不过要求a-b不在集合中,把a-b放入集合(集合元素个数只 ...
- COGS.264.数列操作(分块 单点加 区间求和)
题目链接 #include<cmath> #include<cstdio> #include<cctype> #include<algorithm> u ...
随机推荐
- shell习题第26题:监控mysql服务
[题目要求] 假设mysql密码是123456. 写脚本监控mysql服务是否正常,比如是否可以执行show processlist,并检测一下当前的mysql服务是主还是从.如果是从,请判断他的主从 ...
- Jfinal初次尝试及Jetty使用相关问题
Jetty介绍 Jetty官网:http://www.eclipse.org/jetty/ 参考:Jetty使用教程(一)--开始使用Jetty 1. 使用 参考上面文档,但是有些更新: echo $ ...
- hdu 1875 最小生成树 prime版
最小生成树prime版 大致的步骤 首先选取一个到集合最近的点 然后标记起在集合内部 然后更新最短距离 畅通工程再续 Time Limit: 2000/1000 MS (Java/Others) ...
- (十六)客户端验证与struts2中的服务器端验证
一.客户端验证: 即用javaScript来验证. <%@ page language="java" contentType="text/html; charset ...
- Flash播放控件属性详解
Flash 播放控件属性详解 一.属性篇 1.AlignMode(读写) 语法:AlignMode As Long 说明:对齐方式(与SAlign 属性联动).当控件的长宽比例与影片不一致且WMo ...
- 博客自定义1-皮肤模板 基于SimpleMemory 添加到顶部小按钮
周五公司事不是很紧,打算好好弄下自己的博客,这是自己学习和记录分享地方, 首先请记得申请js权限,默认不支持的,博主是已经申请通过后的样子 接着先选择cnblogs一个现有的模板,我这个就是在他的模板 ...
- java 文件上传 下载 总结
首先引入2个jar 赋值后,组件并不能正常切换, 这是因为数据层太多,render函数没有自动更新,需手动强制刷新. 解决方法:在切换c ...
- 关于一个mvc架构的cms的后台getshell
都知道,mvc的话 除了根目录还有public目录可以访问,其他的访问都是不行的,因为会默认都是会解析url 然后我们来看今天的猪脚 大概的图片上传还有远程文件加载我黑盒测过了 就是想捞一个快一点的 ...
- laravel中引入composer安装在vendor中的第三方组件
一.安装第三方组件 方法一:使用命令行安装第三方(已phpword为例): composer require phpoffce/phpword ^v0..* 方法二: 修改主项目composer.js ...