这是一道水题的code
#include<bits/stdc++.h>
using namespace std;
struct node{int le,ri,maxn;}a[80005];
int n,m,s[20005];
void build(int l,int r,int p){
a[p].le==l,a[p].ri==r;
if(a[p].le==a[p].ri){a[p].maxn=s[a[p].le];return;}
int mid=l+r>>1;
build(l,mid,p*2);
build(mid+1,r,p*2+1);
a[p].maxn=max(a[p*2],a[p*2+1]);
}
int ask(int x,int y,int l,int r,int p){
if(l>=x&&r<=y)return a[p].maxn;
int mid=l+r>>1,ll=0,rr=0;
if(x<=mid)ll=ask(x,y,l,mid,p*2);
if(y>=mid)rr=ask(x,y,mid+1,r,p*2+1);
return max(ll,rr);
}
void change(int l,int r,int x,int y,int p){
if(a[p].le==a[p].ri&&a[p].ri==x){a[p].maxn=max(a[p].maxn,y);return;}
int mid=l+r>>1;
if(l<=mid)change(l,mid,x,y,p*2);
else change(mid,r+1,x,y,p*2+1);
a[p].maxn=a[p*2].maxn,a[p*2+1].maxn;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>s[i];
build(1,n,1);
while(m--){
int x,y;char aa;
cin>>aa>>x>>y;
if(aa=='Q')cout<<ask(x,y,1,n,1)<<endl;
else change(1,n,x,y,1);
}
return 0;
}
,下面是神奇编译错误
/tmp/tmpx78jolb5/src: 在函数‘void build(int, int, int)’中:
/tmp/tmpx78jolb5/src:6:9: 警告:left operand of comma operator has no effect [-Wunused-value]
a[p].le==l,a[p].ri==r;
~~~~~~~^~~
/tmp/tmpx78jolb5/src:6:20: 警告:right operand of comma operator has no effect [-Wunused-value]
a[p].le==l,a[p].ri==r;
~~~~~~~^~~
/tmp/tmpx78jolb5/src:8:11: 警告:建议在‘>>’的操作数中出现的‘+’前后加上括号 [-Wparentheses]
int mid=l+r>>1;
~^~
/tmp/tmpx78jolb5/src:11:31: 错误:cannot convert ‘const node’ to ‘int’ in assignment
a[p].maxn=max(a[p*2],a[p*2+1]);
^
/tmp/tmpx78jolb5/src: 在函数‘int ask(int, int, int, int, int)’中:
/tmp/tmpx78jolb5/src:15:11: 警告:建议在‘>>’的操作数中出现的‘+’前后加上括号 [-Wparentheses]
int mid=l+r>>1,ll=0,rr=0;
~^~
/tmp/tmpx78jolb5/src: 在函数‘void change(int, int, int, int, int)’中:
/tmp/tmpx78jolb5/src:22:11: 警告:建议在‘>>’的操作数中出现的‘+’前后加上括号 [-Wparentheses]
int mid=l+r>>1;
~^~
/tmp/tmpx78jolb5/src:25:33: 警告:right operand of comma operator has no effect [-Wunused-value]
a[p].maxn=a[p*2].maxn,a[p*2+1].maxn;
~~~~~~~~~^~~~
In file included from /usr/include/c++/8/bits/char_traits.h:39,
from /usr/include/c++/8/ios:40,
from /usr/include/c++/8/istream:38,
from /usr/include/c++/8/sstream:38,
from /usr/include/c++/8/complex:45,
from /usr/include/c++/8/ccomplex:39,
from /usr/include/x86_64-linux-gnu/c++/8/bits/stdc++.h:52,
from /tmp/tmpx78jolb5/src:1:
/usr/include/c++/8/bits/stl_algobase.h: In instantiation of ‘const _Tp& std::max(const _Tp&, const _Tp&) [with _Tp = node]’:
/tmp/tmpx78jolb5/src:11:31: required from here
/usr/include/c++/8/bits/stl_algobase.h:224:15: 错误:no match for ‘operator<’ (operand types are ‘const node’ and ‘const node’)
if (__a < __b)
~~~~^~~~~
In file included from /usr/include/c++/8/bits/stl_algobase.h:64,
from /usr/include/c++/8/bits/char_traits.h:39,
from /usr/include/c++/8/ios:40,
from /usr/include/c++/8/istream:38,
from /usr/include/c++/8/sstream:38,
from /usr/include/c++/8/complex:45,
from /usr/include/c++/8/ccomplex:39,
from /usr/include/x86_64-linux-gnu/c++/8/bits/stdc++.h:52,
from /tmp/tmpx78jolb5/src:1:
/usr/include/c++/8/bits/stl_pair.h:454:5: 附注:candidate: ‘template<class _T1, class _T2> constexpr bool std::operator<(const std::pair<_T1, _T2>&, const std::pair<_T1, _T2>&)’
operator<(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
^~~~~~~~
/usr/include/c++/8/bits/stl_pair.h:454:5: 附注: template argument deduction/substitution failed:
In file included from /usr/include/c++/8/bits/char_traits.h:39,
from /usr/include/c++/8/ios:40,
from /usr/include/c++/8/istream:38,
from /usr/include/c++/8/sstream:38,
from /usr/include/c++/8/complex:45,
from /usr/include/c++/8/ccomplex:39,
from /usr/include/x86_64-linux-gnu/c++/8/bits/stdc++.h:52,
from /tmp/tmpx78jolb5/src:1:
/usr/include/c++/8/bits/stl_algobase.h:224:15: 附注: ‘const node’ is not derived from ‘const std::pair<_T1, _T2>’
if (__a < __b)
~~~~^~~~~
In file included from /usr/include/c++/8/bits/stl_algobase.h:67,
from /usr/include/c++/8/bits/char_traits.h:39,
from /usr/include/c++/8/ios:40,
from /usr/include/c++/8/istream:38,
from /usr/include/c++/8/sstream:38,
from /usr/include/c++/8/complex:45,
from /usr/include/c++/8/ccomplex:39,
from /usr/include/x86_64-linux-gnu/c++/8/bits/stdc++.h:52,
from /tmp/tmpx78jolb5/src:1:
/usr/include/c++/8/bits/stl_iterator.h:308:5: 附注:candidate: ‘template<class _Iterator> bool std::operator<(const std::reverse_iterator<_Iterator>&, const std::reverse_iterator<_Iterator>&)’
operator<(const reverse_iterator<_Iterator>& __x,
^~~~~~~~
/usr/include/c++/8/bits/stl_iterator.h:308:5: 附注: template argument deduction/substitution failed:
In file included from /usr/include/c++/8/bits/char_traits.h:39,
from /usr/include/c++/8/ios:40,
from /usr/include/c++/8/istream:38,
from /usr/include/c++/8/sstream:38,
from /usr/include/c++/8/complex:45,
from /usr/include/c++/8/ccomplex:39,
from /usr/include/x86_64-linux-gnu/c++/8/bits/stdc++.h:52,
from /tmp/tmpx78jolb5/src:1:
/usr/include/c++/8/bits/stl_algobase.h:224:15: 附注: ‘const node’ is not derived from ‘const std::reverse_iterator<_Iterator>’
if (__a < __b)
~~~~^~~~~
In file included from /usr/include/c++/8/bits/stl_algobase.h:67,
from /usr/include/c++/8/bits/char_traits.h:39,
from /usr/include/c++/8/ios:40,
from /usr/include/c++/8/istream:38,
from /usr/include/c++/8/sstream:38,
from /usr/include/c++/8/complex:45,
from /usr/include/c++/8/ccomplex:39,
from /usr/include/x86_64-linux-gnu/c++/8/bits/stdc++.h:52,
from /tmp/tmpx78jolb5/src:1:
/usr/include/c++/8/bits/stl_iterator.h:346:5: 附注:candidate: ‘template<class _IteratorL, class _IteratorR> bool std::operator<(const std::reverse_iterator<_Iterator>&, const std::reverse_iterator<_IteratorR>&)’
operator<(const reverse_iterator<_IteratorL>& __x,
^~~~~~~~
/usr/include/c++/8/bits/stl_iterator.h:346:5: 附注: template argument deduction/substitution failed:
In file included from /usr/include/c++/8/bits/char_traits.h:39,
from /usr/include/c++/8/ios:40,
from /usr/include/c++/8/istream:38,
from /usr/include/c++/8/sstream:38,
from /usr/include/c++/8/complex:45,
from /usr/include/c++/8/ccomplex:39,
from /usr/include/x86_64-linux-gnu/c++/8/bits/stdc++.h:52,
from /tmp/tmpx78jolb5/src:1:
/usr/include/c++/8/bits/stl_algobase.h:224:15: 附注: ‘const node’ is not derived from ‘const std::reverse_iterator<_Iterator>’
if (__a < __b)
~~~~^~~~~
In file included from /usr/include/c++/8/bits/stl_algobase.h:67,
from /usr/include/c++/8/bits/char_traits.h:39,
from /usr/include/c++/8/ios:40,
from /usr/include/c++/8/istream:38,
from /usr/include/c++/8/sstream:38,
from /usr/include/c++/8/complex:45,
from /usr/include/c++/8/ccomplex:39,
from /usr/include/x86_64-linux-gnu/c++/8/bits/stdc++.h:52,
from /tmp/tmpx78jolb5/src:1:
/usr/include/c++/8/bits/stl_iterator.h:1139:5: 附注:candidate: ‘template<class _IteratorL, class _IteratorR> bool std::operator<(const std::move_iterator<_IteratorL>&, const std::move_iterator<_IteratorR>&)’
operator<(const move_iterator<_IteratorL>& __x,
^~~~~~~~
/usr/include/c++/8/bits/stl_iterator.h:1139:5: 附注: template argument deduction/substitution failed:
In file included from /usr/include/c++/8/bits/char_traits.h:39,
from /usr/include/c++/8/ios:40,
from /usr/include/c++/8/istream:38,
from /usr/include/c++/8/sstream:38,
from /usr/include/c++/8/complex:45,
from /usr/include/c++/8/ccomplex:39,
from /usr/include/x86_64-linux-gnu/c++/8/bits/stdc++.h:52,
from /tmp/tmpx78jolb5/src:1:
/usr/include/c++/8/bits/stl_algobase.h:224:15: 附注: ‘const node’ is not derived from ‘const std::move_iterator<_IteratorL>’
if (__a < __b)
~~~~^~~~~
In file included from /usr/include/c++/8/bits/stl_algobase.h:67,
from /usr/include/c++/8/bits/char_traits.h:39,
from /usr/include/c++/8/ios:40,
from /usr/include/c++/8/istream:38,
from /usr/include/c++/8/sstream:38,
from /usr/include/c++/8/complex:45,
from /usr/include/c++/8/ccomplex:39,
from /usr/include/x86_64-linux-gnu/c++/8/bits/stdc++.h:52,
from /tmp/tmpx78jolb5/src:1:
/usr/include/c++/8/bits/stl_iterator.h:1145:5: 附注:candidate: ‘template<class _Iterator> bool std::operator<(const std::move_iterator<_IteratorL>&, const std::move_iterator<_IteratorL>&)’
operator<(const move_iterator<_Iterator>& __x,
^~~~~~~~
/usr/include/c++/8/bits/stl_iterator.h:1145:5: 附注: template argument deduction/substitution failed:
In file included from /usr/include/c++/8/bits/char_traits.h:39,
from /usr/include/c++/8/ios:40,
from /usr/include/c++/8/istream:38,
from /usr/include/c++/8/sstream:38,
from /usr/include/c++/8/complex:45,
from /usr/include/c++/8/ccomplex:39,
from /usr/include/x86_64-linux-gnu/c++/8/bits/stdc++.h:52,
from /tmp/tmpx78jolb5/src:1:
/usr/include/c++/8/bits/stl_algobase.h:224:15: 附注: ‘const node’ is not derived from ‘const std::move_iterator<_IteratorL>’
if (__a < __b)
~~~~^~~~~
In file included from /usr/include/c++/8/string:52,
from /usr/include/c++/8/bits/locale_classes.h:40,
from /usr/include/c++/8/bits/ios_base.h:41,
from /usr/include/c++/8/ios:42,
from /usr/include/c++/8/istream:38,
from /usr/include/c++/8/sstream:38,
from /usr/include/c++/8/complex:45,
from /usr/include/c++/8/ccomplex:39,
from /usr/include/x86_64-linux-gnu/c++/8/bits/stdc++.h:52,
from /tmp/tmpx78jolb5/src:1:
/usr/include/c++/8/bits/basic_string.h:6133:5: 附注:candidate: ‘template<class _CharT, class _Traits, class _Alloc> bool std::operator<(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&)’
operator<(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
^~~~~~~~
/
...
什么情况