生活随笔
收集整理的這篇文章主要介紹了
线段树 洛谷 p1531 I hate it(I hate it too)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這里寫鏈接內容
線段樹模板
字符串是一個很詭異的問題。。。。
#include<cstdio>
#include<iostream>
#include<string>
#define q 200000
using namespace std;
int a[q+
5],s[q<<
2+
5];
void bu(
int o,
int l,
int r)
{
if(l==r){s[o]=a[r];}
else{
int mid=l+((r-l)>>
1);bu(o<<
1,l,mid);bu((o<<
1)|
1,mid+
1,r);s[o]=max(s[o<<
1],s[(o<<
1)|
1]);}}
void up(
int o,
int l,
int r,
int in,
int ans)
{
if(l==r){s[o]=ans;
return;}
int mid=l+((r-l)>>
1);
if(in<=mid)up(o<<
1,l,mid,in,ans);
elseup((o<<
1)|
1,mid+
1,r,in,ans);s[o]=max(s[o<<
1],s[(o<<
1)|
1]);}
int qu(
int o,
int l,
int r,
int ql,
int qr)
{
if(r<ql||l>qr)
return -
9999;
if(ql<=l&&qr>=r){
return s[o];}
int mid=l+((r-l)>>
1);
return max(qu(o<<
1,l,mid,ql,qr),qu((o<<
1)|
1,mid+
1,r,ql,qr));
}
int main(){
int n;
int m;
scanf(
"%d%d",&n,&m);
for(
int i=
1;i<=n;i++)
scanf(
"%d",&a[i]);bu(
1,
1,n+
1);
for(
int i=
1;i<=m;i++) {
string b;
int c,d;
cin>>b;
scanf(
"%d%d",&c,&d);
if(b==
"Q") {
printf(
"%d\n",qu(
1,
1,n+
1,c,d)); }
if(b==
"U") {
if(a[c]<d){a[c]=d;up(
1,
1,n+
1,c,d);}}}
return 0;}
轉載于:https://www.cnblogs.com/wspl98765/p/6819903.html
總結
以上是生活随笔為你收集整理的线段树 洛谷 p1531 I hate it(I hate it too)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。