1. 梦游仙境

    ★☆ 输入文件: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. 梦游仙境(分块)的更多相关文章

  1. E - 娜娜梦游仙境系列——莫名其妙的插曲

    E - 娜娜梦游仙境系列——莫名其妙的插曲 E - 娜娜梦游仙境系列——莫名其妙的插曲 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 1 ...

  2. B - 娜娜梦游仙境系列——跳远女王

    B - 娜娜梦游仙境系列——跳远女王 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Other ...

  3. G - 娜娜梦游仙境系列——梦醒

    G - 娜娜梦游仙境系列——梦醒 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others) ...

  4. F - 娜娜梦游仙境系列——多民族王国

    F - 娜娜梦游仙境系列——多民族王国 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Othe ...

  5. D - 娜娜梦游仙境系列——村民的怪癖

    D - 娜娜梦游仙境系列——村民的怪癖 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Othe ...

  6. C - 娜娜梦游仙境系列——吃不完的糖果

    C - 娜娜梦游仙境系列——吃不完的糖果 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Oth ...

  7. A - 娜娜梦游仙境系列——诡异的钢琴

    A - 娜娜梦游仙境系列——诡异的钢琴 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Othe ...

  8. acdream 1684 娜娜梦游仙境系列——莫名其妙的插曲 (gcd)

    题意:一开始有一个集合,集合里有n个不同的数,然后Alice(娜娜)与Bob轮流进行操作,每人都可以任意选择两个数a,b,不妨设a>b,不过要求a-b不在集合中,把a-b放入集合(集合元素个数只 ...

  9. COGS.264.数列操作(分块 单点加 区间求和)

    题目链接 #include<cmath> #include<cstdio> #include<cctype> #include<algorithm> u ...

随机推荐

  1. 『Python基础』第2节: Python简介及入门

    一. Python介绍 Python是一门高级计算机程序设计语言,1989年,荷兰的Guido von Rossum创造了它.Guido是是一个牛人,1982年,他从阿姆斯特丹大学获得了数学和计算机硕 ...

  2. Ubuntu部署ftp服务器

    Ubuntu 16.04 FTP服务器安装及配置     FTP File Transfer Protocol文件传输协议,两台计算机传送文件的协议,客户端可以通过FTP命令从服务器下载,上传文件,修 ...

  3. (十三)Activitivi5之流程控制网关:并行

    一.概念 所谓排他网关 顾名思义 执行到该网关,会有多条线路同时并行执行,当都执行完才继续执行后面的: 二. 案例 此时当“学生请假”任务节点完成之后,如下图此时有两个任务,必须等到两个任务都完成才会 ...

  4. 数据库及MYSQL基础(2)

    数据库及MySQL基础(1) SQL进阶及查询练习 1,单表的查询练习 SELECT * FROM emp WHERE deptno=30; SELECT ename,empno,deptno FRO ...

  5. 安装mysql时出现 mysql Install/Remove of the Service Denied! 错误的解决办法

    用cmd在mysql的bin目录下面执行: mysqld --install 命令,出现错误: mysql Install/Remove of the Service Denied! 解决方法:以管理 ...

  6. S2-032

    前言 S2-032漏洞的影响范围是Struts 2.3.20 - Struts Struts 2.3.28,当开启了动态方法调用时可RCE.这次的漏洞分析以及后面的漏洞分析都是使用的Struts 2. ...

  7. c#界面卡死处理方法

    方法一: 设置属性: Control.CheckForIllegalCrossThreadCalls = false; 开启一个新线程 Thread th = new Thread(() => ...

  8. 一步步用ABAP Development Tools连接SAP云平台上的ABAP编程环境

    使用ABAP Development Tools的项目创建向导: New->ABAP Cloud Project: Service Instance Connection,选择SAP Cloud ...

  9. Tomcat应用访问SSL或https失败的解决办法

    一,首先,解决unable to find valid certification path to requested target的问题. 其实就是要生成证书, 让tomcat读取证书 import ...

  10. 【翻译】--19C Oracle 安装指导

    18C新功能     1.简化的基于镜像的Oracle数据库安装     从18C开始,Oracle可以作为镜像文件来下载和安装,必须解压缩镜像文件到ORACLE_HOME目录,然后执行runInst ...