蒟蒻求调

P1816 忠诚

你这个代码有点混乱,整合一下 ```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


|