@[B1G_CUTE_BUG](/user/398983) 完整代码给一下捏
by Frosts @ 2023-08-25 15:07:58
@[Frosts](/user/1064154)
```cpp
#include<bits/stdc++.h>
using namespace std;
const int N= 2e5+ 5;
int n, m, a[N];
class segt
{
struct node
{
int mx;
} t[N<< 2];
void pushup(int u)
{
t[u].mx= max(t[u<< 1].mx, t[u<< 1| 1].mx);
}
public:
void build(int u, int l, int r)
{
if(l== r)
{
t[u].mx= a[l];
return;
}
int mid= l+ r>> 1;
build(u<< 1, l, mid);
build(u<< 1| 1, mid+ 1, r);
pushup(u);
}
void update(int u, int l, int r, int P, int val)
{
if(l> P || r< P) return;
if(l== r)
{
t[u].mx= max(t[u].mx, val);
return;
}
int mid= l+ r>> 1;
update(u<< 1, l, mid, P, val);
update(u<< 1| 1, mid+ 1, r, P, val);
pushup(u);
}
int query(int u, int l, int r, int L, int R)
{
if(l> R || r< L) return -1e9;
if(l>= L && r<= R) return t[u].mx;
int mid= l+ r>> 1, t1= -1e9;
t1= max(t1, query(u<< 1, l, mid, L, r));
t1= max(t1, query(u<< 1| 1, mid+ 1, r, L, R));
return t1;
}
} T;
signed main()
{
scanf("%d%d", &n, &m);
for(int i= 1; i<= n; i++) scanf("%d", &a[i]);
T.build(1, 1, n);
char c; int x, y;
while(m--)
{
cin >> c;
scanf("%d%d", &x, &y);
if(c=='Q')
printf("%d\n", T.query(1, 1, n, x, y));
else T.update(1, 1, n, x, y);
}
return 0;
}
```
by BIG_CUTE_BUG @ 2023-08-25 15:09:22
@[B1G_CUTE_BUG](/user/398983)
> 在本地使用了如下代码读入字符?cgetchar(); c= getchar();但是OJ上挂了(没有输出),改成了 cin>>c 才成功读入(有输出了)。试问路过的dalao为什么。
`getchar` 函数会读入空格和换行。
by Eirin_Yagokoro @ 2023-08-25 15:11:46
@[__dest__ruct__or__](/user/592238) 是这样的。
by BIG_CUTE_BUG @ 2023-08-25 15:13:51
@[B1G_CUTE_BUG](/user/398983)
> @destructor 是这样的。
所以有可能造数据的时候行末还有一个空格。
by Eirin_Yagokoro @ 2023-08-25 15:15:34
@[__dest__ruct__or__](/user/592238) 所以dalao请问OJ上`getchar`的读入遇到了什么问题
by BIG_CUTE_BUG @ 2023-08-25 15:15:40
@[B1G_CUTE_BUG](/user/398983)
> @destructor 所以dalao请问OJ上getchar的读入遇到了什么问题
发在上面了。
by Eirin_Yagokoro @ 2023-08-25 15:16:06
@[__dest__ruct__or__](/user/592238) 好的谢谢你
by BIG_CUTE_BUG @ 2023-08-25 15:16:16