# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1249367 | chikien2009 | Worst Reporter 3 (JOI18_worst_reporter3) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
using namespace std;
void setup()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
}
int n, q, d[1000001], a, b, c;
inline int Pos(int lim)
{
int l = 0, r = n, m, x = n + 1, p;
while (l <= r)
{
m = (l + r) >> 1;
p = (a / d[m]) * d[m] - m;
if (p <= lim)
{
x = m;
r = m - 1;
}
else
{
l = m + 1;
}
}
return x;
}
int main()
{
setup();
cin >> n >> q;
d[0] = 1;
for (int i = 1; i <= n; ++i)
{
cin >> d[i];
d[i] = max(d[i], d[i - 1]);
d[i] = ((d[i] + d[i - 1] - 1) / d[i - 1]) * d[i - 1];
}
while (q--)
{
cin >> a >> b >> c;
cout << Pos(b - 1) - Pos(c) << "\n";
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
void setup()
{
#ifndef ONLINE_JUDGE
freopen("test.inp", "r", stdin);
freopen("test.out", "w", stdout);
#endif
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
}
int n, q, d[1000001], a, b, c;
inline int Pos(int lim)
{
int l = 0, r = n, m, x = n + 1, p;
while (l <= r)
{
m = (l + r) >> 1;
p = (a / d[m]) * d[m] - m;
if (p <= lim)
{
x = m;
r = m - 1;
}
else
{
l = m + 1;
}
}
return x;
}
int main()
{
setup();
cin >> n >> q;
d[0] = 1;
for (int i = 1; i <= n; ++i)
{
cin >> d[i];
d[i] = max(d[i], d[i - 1]);
d[i] = ((d[i] + d[i - 1] - 1) / d[i - 1]) * d[i - 1];
}
while (q--)
{
cin >> a >> b >> c;
cout << Pos(b - 1) - Pos(c) << "\n";
}
return 0;
}