【链接】 我是链接,点我呀:)

【题意】

给你一个规则,让你知道第i根萝卜的高度为si = A+(i-1)*B
现在给你n个询问;
每次询问给你一个固定的起点l;
让你找一个最大的右端点r;
使得l..r这一段能够在t次"m吃操作"内被吃完.

【题解】

如果l..r里面的最大值大于t了;则无解

最大值小于等于t的话.

每次可以取m个。

然后可以取t次。

也就是说

这一段里面的和<=m*t;

只要A+(i-1)*B大于1e6了就停下来

最坏情况就是A和B都为1

写个rmq+二分就好

【代码】

#include <bits/stdc++.h>
using namespace std;
#define ll long longconst int N = 1e6+10;ll a[N+100],pre[N+100];
ll A,B,Q;
int n;const int MAXL = 20;//log2�������
05-11 22:18
查看更多