你这个代码有点混乱,整合一下
```cpp
#include <bits/stdc++.h>
#define int long long
#define C cin>>
#define CO cout<<
int a[100010];
int seg[100010];
int minz(int x,int y)
{
if(x>=y)
{
return y;
}
else
{
return x;
}
}
void pushup(int tr)
{
seg[tr]=minz(seg[tr<<1],seg[tr<<1|1]);
}
void build(int tr,int l,int r)
{
if(l==r)
{
seg[tr]=a[l];
return;
}
int mid = (l+r)>>1;
build(tr<<1,l,mid);
build(tr<<1|1,mid+1,r);
pushup(tr);
}
int query(int tr,int l,int r,int x,int y)
{
if(x<=l&&y>=r)
{
return seg[tr];
}
int mid=(l+r)>>1;
int ans=0;
if(x<=mid)ans=minz(ans,query(tr<<1,l,mid,x,y));
if(y>mid)ans=minz(ans,query(tr<<1|1,mid+1,r,x,y));
return ans;
}
using namespace std;
signed main()
{
int m,n;
C m>>n;
for(int i=1;i<=m;i++)
{
scanf("%lld",&a[i]);
}
build(1,1,m);
for(int i=1;i<=n;i++)
{
int l,r;
C l>>r;
CO query(1,1,n,l,r)<<endl;
}
return 0;
}
```
by __Tonycyt__ @ 2024-02-03 17:38:55
en
en
但还是样例都过不了
T_T
by hongqihuaxia666 @ 2024-02-03 17:39:24
求调错qwq
by hongqihuaxia666 @ 2024-02-03 17:41:05
```cpp
#include <bits/stdc++.h>
#define int long long
#define C cin>>
#define CO cout<<
int a[100010];
int seg[100010];
int minz(int x,int y)
{
if(x>=y)return y;
else return x;
}
void pushup(int tr)
{
seg[tr]=minz(seg[tr<<1],seg[tr<<1|1]);
}
void build(int tr,int l,int r)
{
if(l==r)
{
seg[tr]=a[l];
return;
}
int mid = (l+r)>>1;
build(tr<<1,l,mid);
build(tr<<1|1,mid+1,r);
pushup(tr);
}
int query(int tr,int l,int r,int x,int y)
{
if(x<=l&&y>=r)
{
return seg[tr];
}
int mid=(l+r)>>1;
int ans=1e5+5;//1
if(x<=mid)ans=minz(ans,query(tr<<1,l,mid,x,y));
if(y>mid)ans=minz(ans,query(tr<<1|1,mid+1,r,x,y));
return ans;
}
using namespace std;
signed main()
{
int m,n;
C m>>n;
for(int i=1;i<=m;i++)
{
scanf("%lld",&a[i]);
}
build(1,1,m);
for(int i=1;i<=n;i++)
{
int l,r;
C l>>r;
CO query(1,1,m,l,r)<<' ';//2
}
return 0;
}
```
四个问题
1. query函数里初始化ans为无穷大
2. 查询时应该是 `query(1,1,m,x,y)` 而不是 n
3. 输出一行,用空格隔开
4. 线段树数组开两倍,因为有 2m-1 个节点
by Tim0509 @ 2024-02-14 21:09:56
代码发错了
```cpp
#include <bits/stdc++.h>
#define int long long
#define C cin>>
#define CO cout<<
int a[100010*2];//4
int seg[100010*2];//4
int minz(int x,int y)
{
if(x>=y)return y;
else return x;
}
void pushup(int tr)
{
seg[tr]=minz(seg[tr<<1],seg[tr<<1|1]);
}
void build(int tr,int l,int r)
{
if(l==r)
{
seg[tr]=a[l];
return;
}
int mid = (l+r)>>1;
build(tr<<1,l,mid);
build(tr<<1|1,mid+1,r);
pushup(tr);
}
int query(int tr,int l,int r,int x,int y)
{
if(x<=l&&y>=r)
{
return seg[tr];
}
int mid=(l+r)>>1;
int ans=1e5+5;//1
if(x<=mid)ans=minz(ans,query(tr<<1,l,mid,x,y));
if(y>mid)ans=minz(ans,query(tr<<1|1,mid+1,r,x,y));
return ans;
}
using namespace std;
signed main()
{
int m,n;
C m>>n;
for(int i=1;i<=m;i++)
{
scanf("%lld",&a[i]);
}
build(1,1,m);
for(int i=1;i<=n;i++)
{
int l,r;
C l>>r;
CO query(1,1,m,l,r)<<' ';//2&3
}
return 0;
}
```
by Tim0509 @ 2024-02-14 21:10:34
@[hongqihuaxia666](/user/925127)
by Tim0509 @ 2024-02-15 12:49:56
@[Tim0509](/user/933530)
ok
栓Q
by hongqihuaxia666 @ 2024-03-02 15:25:18