社区讨论
62pts求助,玄关
P14058 【MX-X21-T3】[IAMOI R5] 两个人的演唱会参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mhj433wz
- 此快照首次捕获于
- 2025/11/03 20:23 4 个月前
- 此快照最后确认于
- 2025/11/03 20:23 4 个月前
只错了#23 和 #42 两个点
CPP#include <bits/stdc++.h>
using namespace std;
#define int long long
int n, m;
int tt;
const int N = 6e7 + 10;
int b[N];
int read() {
int x = 0, f = 1;
char c = getchar();
while (!isdigit(c)) {
if(c == '-') f = -1;
c = getchar();
}
while (isdigit(c)) {
x = x * 10 + c - '0';
c = getchar();
}
return x * f;
}
int zh(int g) {
if(g > n) return g - n;
return g + n;
}
int solve(int l, int r) {
if(l == r) return 1;
if(l > r) return 0;
int minn, maxn;
minn = maxn = b[l];
int res = 0;
for (int i = l; i <= r; i ++) {
minn = min(minn, b[i]);
maxn = max(maxn, b[i]);
if(maxn - minn > m) {
maxn = minn = b[i];
res ++;
}
}
return res + 1;
}
int rell() {
int idx = n + 1;
for (int i = n + 1; i <= n * 2; i ++) if(b[i] > b[idx]) idx = i;
int nl, nr;
nl = idx - 1;
nr = idx + 1;
while (nr <= n * 2) {
if(b[idx] - b[nr] > m) break ;
nr ++;
}
while (nl >= zh(nr)) {
if(b[idx] - b[nl] > m) break ;
nl --;
}
nr = zh(nr);
return solve(nr, nl);
}
signed main(void) {
tt = read();
while (tt --) {
n = read(), m = read();
for (int i = 1; i <= n; i ++) b[i] = b[n + i] = read();
cout << rell() + 1 << endl;
}
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...