【OJ2216】小奇的数列
题目大意 : 给定一个长度为 \(n\) 的数列,以及 \(m\) 次询问,每次给出三个数 \(l\),\(r\) 和 \(P\),询问 \((\sum_{i=l_1}^{r_1}a_i)\;mod\;P\) 的最小值。 其中 \(l \le l_1 \le r_1 \le r\) 。 \((n\le 5\times 10^5, m\le 10^4,P\le 500)\)
Tag: 抽屉原理、STL
最朴素的做法当然是计算前缀和再枚举 \(l_1\) 和 \(r_1\) 。这里有一个优化:如果区间中有超过 \(P\) 个元素,那么可以根据抽屉原理证明一定存在一个区间使得区间和膜 \(P\) 为 \(0\) ,可以据此让区间大小大于 \(P\) 的区间直接输出 \(0\) 。
那么我们只考虑枚举 \(l_1\) 和 \(r_1\) 中的一个是否可以完成本题?我们可以只枚举 \(r_1\) ,显然我们要找到一个 \(l_1\) ,使得 \(s[r_1]-s[l_1]\) 最小,即 \(s[l_1]\) 与 \(s[r_1]\) 最接近,用STL的 \(\text Set\) 即可维护。(这里 \(s[x]\) 表示 \((sum[x]-sum[l-1])\,mod\,P\) )
#include<cstdio>
#include<algorithm>
#include<set>
using namespace std;
inline int _read()
{
char c; int x=0;
for(;c<'0'||c>'9';c=getchar());
for(;c>='0'&&c<='9';c=getchar())x=(x<<1)+(x<<3)+c-'0';
return x;
}
typedef long long ll;
const int N=500005;
int a[N];
ll sum[N];
int main()
{
int n=_read(),m=_read();
for(int i=1;i<=n;i++)
{
a[i]=_read();
sum[i]=sum[i-1]+a[i];
}
while(m--)
{
int l=_read(),r=_read(),p=_read(),ans=501;
set<ll> s;
s.insert(0);
if(r-l+1>=p)
{
puts("0");
continue;
}
for(int i=l;i<=r;i++)
{
ll w=(sum[i]-sum[l-1])%p;
auto it=s.upper_bound(w); if(it!=s.begin())--it;
ans=min(ans,int((w-*it)%p));
s.insert(w);
}
printf("%d\n",ans);
}
}
【OJ2216】小奇的数列的更多相关文章
- 小奇模拟赛9.13 by hzwer
2015年9月13日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿(explo) [题目背景] 小奇要开采一些矿物,它驾驶着一台带有钻头(初始能力值w)的飞船,按既定路线依次飞 ...
- bzoj4547: Hdu5171 小奇的集合(矩阵乘法)
4547: Hdu5171 小奇的集合 题目:传送门 题解: 做一波大佬们的坑...ORZ 不得不说,我觉得矩阵很简单啊,就一个3*3的(直接看代码吧) 给个递推柿纸:f[i]=f[i-1]+max1 ...
- NOIP模拟赛(by hzwer) T2 小奇的序列
[题目背景] 小奇总是在数学课上思考奇怪的问题. [问题描述] 给定一个长度为 n 的数列,以及 m 次询问,每次给出三个数 l,r 和 P, 询问 (a[l'] + a[l'+1] + ... + ...
- 2.17NOIP模拟赛(by hzwer) T2 小奇的序列
[题目背景] 小奇总是在数学课上思考奇怪的问题. [问题描述] 给定一个长度为 n 的数列,以及 m 次询问,每次给出三个数 l,r 和 P, 询问 (a[l'] + a[l'+1] + ... + ...
- 【BZOJ-4548&3658】小奇的糖果&Jabberwocky 双向链表 + 树状数组
4548: 小奇的糖果 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 103 Solved: 47[Submit][Status][Discuss] ...
- 【BZOJ-4547】小奇的集合 矩阵乘法 + 递推
4547: Hdu5171 小奇的集合 Time Limit: 2 Sec Memory Limit: 256 MBSubmit: 175 Solved: 85[Submit][Status][D ...
- BZOJ4711 小奇挖矿
Description [题目背景] 小奇在喵星系使用了无限非概率驱动的采矿机,以至于在所有星球上都采出了一些矿石,现在它准备建一些矿石仓 库并把矿石运到各个仓库里. [问题描述] 喵星系有n个星球, ...
- bzoj 4547 小奇的集合
Description 有一个大小为n的可重集S,小奇每次操作可以加入一个数a+b(a,b均属于S),求k次操作后它可获得的S的和的最大 值.(数据保证这个值为非负数) Input 第一行有两个整数n ...
- 小奇的糖果(candy)
[题目背景]小奇不小心让糖果散落到了地上,它对着满地的彩色糖果胡思乱想.[问题描述]有 N 个彩色糖果在平面上. 小奇想在平面上取一条水平的线段,并拾起它上方或下方的所有糖果.求出最多能够拾起多少糖果 ...
随机推荐
- MVC PartialView使用
https://blog.csdn.net/mss359681091/article/details/51181037
- centos安装出现dracut-initqueue timeout错误
dracut:/# cd /dev dracut:/# ls 这样子你就会看到所有的设备信息. 找到sda4, 不一定是sda4,有可能是其他的,实在不确定就拔了优盘看一下哪个消失了 dracut: ...
- kibana 删除document或者type
// 删除某个document DELETE /索引名称/type名称/document编号(id) // 删除整个type PUT 索引名称/type名称/_delete_by_query?conf ...
- Android_实验小心得_持续补充中......
1.LineLayout布局控件宽度百分比显示 其中,宽度百分比 = 控件权重 / 所在parent中所有控件权重和 <LinearLayout android:layout_width=&qu ...
- Red_Hat yum源配置
http://www.linuxidc.com/Linux/2016-06/132171.htm
- 关闭Hyper-V后,天翼校园宽带(Netkeeper)依旧显示Sorry, this application cannot run under a Virtual Machin的解决方法
环境: win10专业版,版本1909 经过: 尝试了一下win10 更新后的沙盒系统,当时开启了沙盒,但是未打开Hyper-V,沙盒正常运行. 第二次开机后天翼校园宽带(Netkeeper)显示So ...
- CF755G PolandBall and Many Other Balls 题解
从神 Karry 的题单过来的,然后自己瞎 yy 了一个方法,看题解区里没有,便来写一个题解 一个常数和复杂度都很大的题解 令 \(dp_{i,j}\) 为 在 \(i\) 个球中选 \(j\) 组的 ...
- 三 Hibernate持久化状态&主键生成策略
持久化类 持久化:将内存中的一个对象持久化到数据库中的过程 持久化类:Java类+映射文件.Java中一个类与数据库的表建立了映射关系,那么这个类称为持久化类. 持久化类的编写规则: 对持久化类提供一 ...
- Matplotlib 安装
章节 Matplotlib 安装 Matplotlib 入门 Matplotlib 基本概念 Matplotlib 图形绘制 Matplotlib 多个图形 Matplotlib 其他类型图形 Mat ...
- springboot内嵌定时任务使用及cron表达式讲解
第一步:pom引入依赖 <dependencies> <dependency> <groupId>org.springframework.boot</grou ...