社区讨论
求反例(必关)
P10264[GESP202403 八级] 接竹竿参与者 3已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @mkp1uvhf
- 此快照首次捕获于
- 2026/01/22 14:07 4 周前
- 此快照最后确认于
- 2026/01/22 21:43 4 周前
有没有大佬能给出这段代码的反例(提交喜提 0pts),悬赏一个关注,非常感谢
CPP#include<bits/stdc++.h>
using namespace std;
const int N = 1.5e4 + 10;
struct pkl{
int l,r,ypk[20],tot;
};
pkl f[N][25];
int a[N];
pkl pushup(pkl x,pkl y){
int vis[30] = {},flag = 0;
pkl ans;
ans.l = x.l; ans.r = y.r;
ans.tot = 0;
for(int i = 1;i <= x.tot;i++){
for(int j = 1;j <= y.tot;j++){
if(x.ypk[i] == y.ypk[j]){
vis[i]++; vis[x.tot + j + 1]--;
flag = 1;
break;
}
}
if(flag) break;
}
for(int i = 1;i <= x.tot + y.tot;i++){
vis[i] += vis[i-1];
if(vis[i] == 0){
ans.tot++;
if(i <= x.tot) ans.ypk[ans.tot] = x.ypk[i];
else ans.ypk[ans.tot] = y.ypk[i - x.tot];
}
}
return ans;
}
int main(){
int t;
scanf("%d",&t);
while(t--){
int n,q;
scanf("%d",&n);
for(int i = 1;i <= n;i++){
scanf("%d",&a[i]);
}
for(int i = 1;i <= n;i++){
f[i][0].l = f[i][0].r = i;
f[i][0].tot++; f[i][0].ypk[f[i][0].tot] = a[i];
}
for(int j = 1;j <= 20;j++){
for(int i = 1;i + (1 << j) - 1 <= n;i++){
f[i][j] = pushup(f[i][j-1],f[i + (1 << (j-1))][j-1]);
}
}
scanf("%d",&q);
for(int i = 1;i <= q;i++){
int l,r;
scanf("%d%d",&l,&r);
pkl ans;
ans.l = l; ans.r = l-1; ans.tot = 0;
for(int j = 20;j >= 0;j--){
if((ans.r + (1 << j)) <= r) ans = pushup(ans,f[ans.r + 1][j]);
}
cout << ans.tot << '\n';
}
}
return 0;
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...