洛谷 1198 線段樹

2022-05-20 12:17:26 字數 1416 閱讀 7530

線段樹的單點更新+區間查詢,典型的求區間最大值。

**如下:

1 #include2

using

namespace

std;

3 typedef unsigned int

ui;4 typedef long

long

ll;5 typedef unsigned long

long

ull;

6#define pf printf

7#define mem(a,b) memset(a,b,sizeof(a))

8#define prime1 1e9+7

9#define prime2 1e9+9

10#define pi 3.14159265

11#define lson l,mid,rt<<1

12#define rson mid+1,r,rt<<1|1

13#define scand(x) scanf("%llf",&x)

14#define f(i,a,b) for(int i=a;i<=b;i++)

15#define scan(a) scanf("%d",&a)

16#define dbg(args) cout<<#args<<":"<17

#define pb(i) push_back(i)

18#define ppb(x) pop_back(x)

19#define inf 0x7fffffff

20#define maxn 200005

21int

n,m,mod;

22int t[maxn<<2

];23

char s[4

];24

int x,tot=0;25

void build(int l,int r,int rt)//

遞迴建樹,由於維護的是區間最大值,建樹初始是-inf

2633

void update(int l,int r,int rt,int pos,int c)//

單點更新

3440

int mid=(l+r)>>1;41

if(pos<=mid)update(lson,pos,c);

42else

update(rson,pos,c);

43 t[rt]=max(t[rt<<1],t[rt<<1|1]);//

pushup操作,由於沒有lazytag所以直接一條語句來維護 44}

45int query(int l,int r,int rt ,int l,int

r)46 53

intmain()

5471

else

if(s[0]=='q'

)7276}

77 }

洛谷1198最大數(線段樹)

現在請求你維護乙個數列,要求提供以下兩種操作 1 查詢操作。語法 q l 功能 查詢當前數列中末尾l個數中的最大的數,並輸出這個數的值。限制 l不超過當前數列的長度。2 插入操作。語法 a n 功能 將n加上t,其中t是最近一次查詢操作的答案 如果還未執行過查詢操作,則t 0 並將所得結果對乙個固定...

洛谷1198 最大值 線段樹

現在請求你維護乙個數列,要求提供以下兩種操作 1 查詢操作。語法 q l 功能 查詢當前數列中末尾l個數中的最大的數,並輸出這個數的值。限制 l不超過當前數列的長度。2 插入操作。語法 a n 功能 將n加上t,其中t是最近一次查詢操作的答案 如果還未執行過查詢操作,則t 0 並將所得結果對乙個固定...

洛谷1198 最大數 線段樹

現在請求你維護乙個數列,要求提供以下兩種操作 1 查詢操作。語法 q l 功能 查詢當前數列中末尾l個數中的最大的數,並輸出這個數的值。限制 l不超過當前數列的長度。l 0 2 插入操作。語法 a n 功能 將n加上t,其中t是最近一次查詢操作的答案 如果還未執行過查詢操作,則t 0 並將所得結果對...