| 比赛 |
NOIP2025模拟赛1 |
评测结果 |
AAAAAAAAAA |
| 题目名称 |
接竹竿 |
最终得分 |
100 |
| 用户昵称 |
梧叶已同秋雨去 |
运行时间 |
0.490 s |
| 代码语言 |
C++ |
内存使用 |
5.33 MiB |
| 提交时间 |
2025-11-24 10:24:56 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int t,n,a[15005],q;
int tu[25],nxt[15005][35];
int main(){
freopen("bamboo.in","r",stdin);
freopen("bamboo.out","w",stdout);
cin>>t;
while(t--){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
for(int j=0;j<=20;j++)nxt[i][j]=n+1;
}
for(int i=1;i<=13;i++){
tu[i]=0;
}
for(int i=1;i<=n;i++){
if(tu[a[i]]==0){
tu[a[i]]=i;
}else{
nxt[tu[a[i]]][0]=i;
tu[a[i]]=i;
}
}
for(int j=1;j<=20;j++){
for(int i=1;i<=n;i++){
if(nxt[i][j-1]+1<=n){
nxt[i][j]=nxt[nxt[i][j-1]+1][j-1];
}
}
}
// for(int i=1;i<=n;i++){
// for(int j=0;j<=20;j++){
// cout<<nxt[i][j]<<" ";
// }cout<<endl;
// }
scanf("%d",&q);
while(q--){
int ii,l,r;int ans=0;
scanf("%d%d",&ii,&r);l=ii;
while(l<=r){
while(l<=r&&nxt[l][0]>r){
l++;
ans++;
}
if(l>r)break;
for(int j=20;j>=0;j--){
if(nxt[l][j]<=r){
l=nxt[l][j];
break;
}
}
l++;
}
printf("%d\n",ans);
}
}
return 0;
}