求救 请大佬帮忙找找毛病

P1816 忠诚

注意别把mid定义为全局变量,不然递归函数的时候会改变mid的值,导致find函数写错了 改好的程序: ```cpp #include<bits/stdc++.h> using namespace std; long long n,m,b,ans,mid; long long c[500005]; long long a[500005]; long long xi[500005]; long long yi[500005]; int build(int l,int r,int s){ if(l==r){ a[s]=c[l]; return 0; } mid=(l+r)/2; build(l,mid,s*2); mid=(l+r)/2; build(mid+1,r,s*2+1); a[s]=min(a[s*2],a[s*2+1]); return 0; } int find(int x,int y,int l,int r,int s){ if(x<=l&&y>=r){ ans=min(ans,a[s]); return 0; } if(y>=l&&x<=l||x<=r&&y>=r||x>=l&&y<=r){ mid=(l+r)/2; find(x,y,l,mid,s*2); mid=(l+r)/2; find(x,y,mid+1,r,s*2+1); } return 0; } int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++){ cin>>c[i]; } build(1,n,1); for(int i=1;i<=m;i++){ scanf("%d%d",&xi[i],&yi[i]); ans=2147483647; find(xi[i],yi[i],1,n,1); cout<<ans<<" "; } return 0; } ```
by syp11 @ 2024-01-24 00:26:07


@[shiyupeng](/user/957501) 谢谢
by felixabc @ 2024-01-24 09:43:11


|