养花

题目描述

小\(C\)在家种了\(n\)盆花,每盆花有一个艳丽度\(a_i\).

在接下来的\(m\)天中,每天早晨他会从一段编号连续的花中选择一盆摆放在客厅, 并在晚上放回. 同时每天有特定的光照强度\(k_i\), 如果这一天里摆放在客厅的花艳丽度为\(x\), 则他能获得的喜悦度为\(x\ \mathrm{mod}\ k_i\).

他希望知道, 每一天他能获得的最大喜悦度是多少.

输出输出格式

输入格式

数据第一行包含两个正整数\(n,m\).

接下来一行\(n\)个正整数, 第\(i\)个数\(a_i\)表示第\(i\)盆花的艳丽度.

接下来\(m\)行, 每行三个正整数\(l_i,r_i,k_i\), 表示选花区间和光照强度.

输出格式

输出\(m\)行, 每行一个整数, 表示最大喜悦度.

说明

对于\(20\%\)的数据,\(n,m\le 4000\).

对于\(40\%\)的数据,\(n,m\le 50000\).

对于另外\(20\%\)的数据,\(a_i\le 300\).

对于\(100\%\)的数据,\(n,m,a_i,k_i\le 10^5\).


区间询问 \(a_i \ mod \ k\) 的最大值

如果分块搞得熟估计可以A掉吧,或者主席树敢瞎写之类的

最开始想到一个垃圾的\(nlogn\sqrt n\)做法

思路是\(k \le \sqrt n\)预处理线段树套分块,然后\(logn\)查询

\(k > \sqrt n\)时暴力在主席树上找,单次\(\sqrt n logn\)

40pts 都拿不到

正解的做法是分块,对位置的分块

设块大小为\(S\),每个块预处理出模所有\(k\)时的最值

处理的技巧其实有点神奇,\(f[i]\)表示当前块\(i\)这个值的位置前面一个值是多少

然后枚举\(k\),枚举每个区间,用\(f[i]\)更新

对每个块的复杂度是\(\sum_{i=1}^n \frac{n}{i}\)

发现是调和级数,则为\(nlnn\)

总复杂度:\(O(n^2lnn/s+ms)\)

取\(S=\sqrt{nlnn}\),得到复杂度\(O(n\sqrt{nlnn})\)

事实上上界比较满,常数也不小,你谷最慢点跑了1.5s(雅礼只开了1s,跑的真快emm


Code:

#include <cstdio>
#include <cstring>
const int N=1e5;
const int S=1e3;
const int M=1e2;
int mx[M+2][N+10],n,m,a[N+10],f[N+10];
int max(int x,int y){return x>y?x:y;}
int min(int x,int y){return x<y?x:y;}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) scanf("%d",a+i);
int num=(n-1)/S;
for(int i=0;i<=num;i++)
{
memset(f,0,sizeof(f));
int l=i*S+1,r=min(n,(i+1)*S);
for(int j=l;j<=r;j++) f[a[j]]=a[j];
for(int j=1;j<=N;j++) f[j]=max(f[j-1],f[j]);
for(int j=1;j<=N;j++)
for(int k=0;k<=N;k+=j) mx[i][j]=max(mx[i][j],f[min(k+j-1,N)]-k);
}
for(int l,r,k,i=1;i<=m;i++)
{
int ans=0;
scanf("%d%d%d",&l,&r,&k);
int ll=(l-1)/S,rr=(r-1)/S;
for(int j=ll+1;j<rr;j++) ans=max(ans,mx[j][k]);
for(int j=l;j<=min(r,(ll+1)*S);j++) ans=max(ans,a[j]%k);
for(int j=max(l,rr*S+1);j<=r;j++) ans=max(ans,a[j]%k);
printf("%d\n",ans);
}
return 0;
}

2018.10.1

雅礼集训 Day1 T1 养花的更多相关文章

  1. 【2017-10-1】雅礼集训day1

    今天的题是ysy的,ysy好呆萌啊. A: 就是把一个点的两个坐标看成差分一样的东西,以此作为区间端点,然后如果点有边->区间没有交. B: cf原题啊.....均摊分析,简单的那种. 线段树随 ...

  2. 雅礼集训 Day1 T3 画作 解题报告

    画作 题目描述 小\(\mathrm{G}\)的喜欢作画,尤其喜欢仅使用黑白两色作画. 画作可以抽象成一个\(r\times c\)大小的\(01\)矩阵.现在小\(\mathrm{G}\)构思好了他 ...

  3. 雅礼集训 Day7 T1 Equation 解题报告

    Reverse 题目背景 小\(\text{G}\)有一个长度为\(n\)的\(01\)串\(T\),其中只有\(T_S=1\),其余位置都是\(0\).现在小\(\text{G}\)可以进行若干次以 ...

  4. 雅礼集训 Day6 T1 Merchant 解题报告

    Merchant 题目描述 有\(n\)个物品,第\(i\)个物品有两个属性\(k_i,b_i\),表示它在时刻\(x\)的价值为\(k_i\times x+b_i\). 当前处于时刻\(0\),你可 ...

  5. 雅礼集训 Day1 T2 折射

    折射 题目描述 小\(\mathrm{Y}\)十分喜爱光学相关的问题,一天他正在研究折射. 他在平面上放置了\(n\)个折射装置,希望利用这些装置画出美丽的折线. 折线将从某个装置出发,并且在经过一处 ...

  6. 「雅礼集训 2017 Day1」 解题报告

    「雅礼集训 2017 Day1」市场 挺神仙的一题.涉及区间加.区间除.区间最小值和区间和.虽然标算就是暴力,但是复杂度是有保证的. 我们知道如果线段树上的一个结点,\(max=min\) 或者 \( ...

  7. [LOJ 6031]「雅礼集训 2017 Day1」字符串

    [LOJ 6031] 「雅礼集训 2017 Day1」字符串 题意 给定一个长度为 \(n\) 的字符串 \(s\), \(m\) 对 \((l_i,r_i)\), 回答 \(q\) 个询问. 每个询 ...

  8. [LOJ 6030]「雅礼集训 2017 Day1」矩阵

    [LOJ 6030] 「雅礼集训 2017 Day1」矩阵 题意 给定一个 \(n\times n\) 的 01 矩阵, 每次操作可以将一行转置后赋值给某一列, 问最少几次操作能让矩阵全为 1. 无解 ...

  9. [LOJ 6029]「雅礼集训 2017 Day1」市场

    [LOJ 6029] 「雅礼集训 2017 Day1」市场 题意 给定一个长度为 \(n\) 的数列(从 \(0\) 开始标号), 要求执行 \(q\) 次操作, 每次操作为如下四种操作之一: 1 l ...

随机推荐

  1. substring和substr小结

    substring 1 substring 方法用于提取字符串中介于两个指定下标之间的字符 2 substring(start,end) 开始和结束的位置,从零开始的索引 end:字符串下标,结束符是 ...

  2. GNU汇编 存储器访问指令

    .text .global  _start _start: mov r0,#0xff str r0,[r1] ldr r2,[r1]

  3. php-5.6.26源代码 - 扩展模块的加载、注册

    // main实现在文件 php-5.6.26\sapi\cgi\cgi_main.c int main(int argc, char *argv[]) { .... cgi_sapi_module- ...

  4. myql简单语法测试

    删除某一行  delete from name1 where agee=10 limit 1; insert into name1(agee,namee)values(10,'wwww'),(10,' ...

  5. Linux系统完整安装在虚拟机Mini

    打开VMware Workstation虚拟机,然后如下图一步到位: 此处只是简单的安装Linux系统,要想查看安装后的IP等配置看: https://www.cnblogs.com/gentle-a ...

  6. 001---web应用程序

    什么是web应用? 应用程序分两种模式:C/S.B/S 1 .C/S:客户端(Client)与服务端 一般独立运行 2 .B/S:浏览器(Browser)与服务端 这类应用要借助浏览器:谷歌.火狐.I ...

  7. Docker使用入门

    docker images 查看本地镜像 docker ps -a  查询容器 docker ps -l  查询最近使用容器 docker rm CONTAINER_ID 删除容器 docker rm ...

  8. 【数据库】MySQL 从安装到命令

    一, MySQL 的安装于配置 我是通过百度云盘的方式下载的.建议登录百度云终端,然后点击下面的链接,选择要安装的版本,解压安装. http://www.h2ero.cn/pan/share/17cd ...

  9. CodeForces 785C Anton and Fairy Tale 二分

    题意: 有一个谷仓容量为\(n\),谷仓第一天是满的,然后每天都发生这两件事: 往谷仓中放\(m\)个谷子,多出来的忽略掉 第\(i\)天来\(i\)只麻雀,吃掉\(i\)个谷子 求多少天后谷仓会空 ...

  10. swoole创建websocket服务器

    目录 1 安装准备 1.1 安装swoole前必须保证系统已经安装了下列软件 1.2 下载并解压 1.3 编译安装成功后,修改php.ini 2 构建Swoole基本实例 2.1 tcp服务器实例 2 ...