养花

题目描述

小\(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. Logger日志配置级别说明及设置方法、说明

    日志记录器(Logger)是日志处理的核心组件.log4j具有5种正常级别(Level).日志记录器(Logger)的可用级别Level (不包括自定义级别 Level), 以下内容就是摘自log4j ...

  2. gd库 给底图写入文字问题

    png-8的图片 设置颜色会返回false,换成png-24的就可以了

  3. scrapy--json(360美图)

    之前开始学习scrapy,接触了AJax异步加载.一直没放到自己博客,趁现在不忙,也准备为下一个爬虫做知识储存,就分享给大家. 还是从爬取图片开始,先上图给大家看看成果,QAQ. 一.图片加载的方法 ...

  4. tcl之正则表达式

  5. PHP无限分类生成树方法,非递归,引用

    //这个是核心方法 function generateTree($items){     $tree = array();     foreach($items as $item){         ...

  6. Social Media Addiction【社交媒体上瘾】

    Social Media Addiction Children as young as ten are becoming dependent on social media for their sen ...

  7. ZOJ3640 概率DP

    Background If thou doest well, shalt thou not be accepted? and if thou doest not well, sin lieth at ...

  8. https://www.cnblogs.com/gaoxiang12/p/3695962.html

    https://www.cnblogs.com/gaoxiang12/p/3695962.html

  9. Poweroj:来自学长的善意:ZQ的杀龙之旅(状压BFS)

    传送门:https://www.oj.swust.edu.cn/problem/show/2794 来自学长的善意:ZQ的杀龙之旅 Time Limit: 15000 MS Memory Limit: ...

  10. ABAP 7.51 構文書き方変換について

    便利になったなぁと感じたコマンドのメモです.NetWeaver7.40 SP2から使えます. SAP NetWeaver AS for ABAP 7.51 Innovation Package – O ...