社区讨论
求调C
学术版参与者 8已保存回复 22
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 22 条
- 当前快照
- 1 份
- 快照标识符
- @mmgdnzjx
- 此快照首次捕获于
- 2026/03/07 21:47 3 天前
- 此快照最后确认于
- 2026/03/09 23:55 11 小时前
all in F了将近50min,但是并没有调出C错误在哪。思路是ST表,查每个间隙,RE
CPP#include<bits/stdc++.h>
using namespace std;
const int N=1e5;
int n,q,a[N+5],f[N+5][101],x,logg[N+5];
int max(int xx,int yy){
return (xx>yy)?xx:yy;
}int min(int xx,int yy){
return (xx<yy)?xx:yy;
}
int work(int xx,int yy){
int k=logg[yy-xx+1];
return min(f[xx][k],f[yy-(1<<k)+1][k]);
}
signed main(){
scanf("%d%d",&n,&q);
logg[0]=-1;
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
logg[i]=logg[i>>1]+1;
f[i][0]=a[i];
}for(int j=1;j<=logg[n];j++){
for(int i=1;i+(1<<j)-1<=n;i++){
f[i][j]=min(f[i][j-1],f[i+(1<<(j-1))][j-1]);
}
}while(q--){
int k,last=0,minn=2*1e9;
scanf("%d",&x);
for(int i=1;i<=x+1;i++){
if(i<=x) scanf("%d",&k);
else k=n+1;
if(k==last+1){
last=k;
continue;
}
//cout << k << ' ' << last << endl;
if(k==last+3){
minn=min(minn,min(a[k-1],last+1));
}else minn=min(minn,work(k-1,last+1));
last=k;
}cout << minn << endl;
}
}
回复
共 22 条回复,欢迎继续交流。
正在加载回复...