版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhanghaoxian1/article/details/82951370
4307. 【NOIP2015模拟11.3晚】喝喝喝
Description
Input
Output
Sample Input
3 2
5 3 1
Sample Output
4
Data Constraint
分析:枚举每个区间终点,通过枚举倍数判定区间起点。
代码
#include <cstdio>
#define N 100005
#define ll long long
using namespace std;
int n,k,a[N];
int f[N];
ll ans;
int main()
{
freopen("drink.in","r",stdin);
freopen("drink.out","w",stdout);
scanf("%d%d", &n, &k);
int mx = 0;
for (int i = 1; i <= n; i++)
{
scanf("%d", &a[i]);
if (a[i] > mx) mx = a[i];
}
int l = 1, r = 2;
f[a[l]]++;
while (r <= n)
{
int i = 0;
int s = a[r] * i + k;
if (a[r] > k)
while(s <= mx)
{
while (f[s]) f[a[l++]]--;
i++;
s = a[r] * i + k;
}
ans += r - l;
f[a[r++]]++;
}
printf("%lld", ans + n);
fclose(stdin);
fclose(stdout);
}