Bzoj 1251 序列終結者 splay

2022-02-13 02:05:01 字數 1928 閱讀 1220

1251: 序列終結者

time limit:20 secmemory limit:162 mb

description

網上有許多題,就是給定乙個序列,要你支援幾種操作:a、b、c、d。一看另一道題,又是乙個序列 要支援幾種操作:d、c、b、a。尤其是我們這裡的某人,出模擬試題,居然還出了一道這樣的,真是沒技術含量……這樣 我也出一道題,我出這一道的目的是為了讓大家以後做這種題目有乙個「庫」可以依靠,沒有什麼其他的意思。這道題目 就叫序列終結者吧。 【問題描述】 給定乙個長度為n的序列,每個序列的元素是乙個整數(廢話)。要支援以下三種操作: 1. 將[l,r]這個區間內的所有數加上v。 2. 將[l,r]這個區間翻轉,比如1 2 3 4變成4 3 2 1。 3. 求[l,r]這個區間中的最大值。 最開始所有元素都是0。

input

第一行兩個整數n,m。m為操作個數。 以下m行,每行最多四個整數,依次為k,l,r,v。k表示是第幾種操作,如果不是第1種操作則k後面只有兩個數。

output

對於每個第3種操作,給出正確的回答。

sample input

4 4

1 1 3 2

1 2 4 -1

2 1 3

3 2 4

sample output

2 【資料範圍】

n<=50000,m<=100000。

/*

splay區間翻轉.

還是沒太懂原理orz.

搞乙個中序遍歷樹.

學了學建樹姿勢2333.

注意下放的時候先看有沒有左右子樹.

*/#include

#include

#define maxn 50010

#define inf 1e9

using namespace std;

int n,m,t1,t2,size[maxn],fa[maxn],s[maxn],tag[maxn],tree[maxn][2],tot,cut,root,max1[maxn],id[maxn];

bool rev[maxn];

intread()

while(ch>='0'&&ch<='9') x=x

*10+ch-48,ch=getchar();

return

x*f;

}void updata(int k)

void push(int k)

if(rev[k])

return ;

}void build(int l,int r,int f)

build(l,mid-1,mid),build(mid+1,r,mid);

fa[k]=last;updata(k);

if(kelse tree[last][1]=k;

return ;

}void rotate(int

x,int &k)

fa[y]=x,fa[x]=z;fa[tree[x][r]]=y;

tree[y][l]=tree[x][r],tree[x][r]=y;

updata(y),updata(x);return ;

}void splay(int

x,int &k)

rotate(x,k);

}return ;

}int query(int k,int

x)void slovechange(int

x,int

y,int z)

int querymax(int

x,int

y)void rever(int

x,int

y)int main()

return

0;}

bzoj 1251 序列終結者

題目在這裡 這應該是splay裸題了吧。對於每個節點儲存5個值,size,max,flag,lazy,val 分別表示這個節點的子樹大小,子樹的最大值,子樹是否有打過翻轉標記,子樹的增加的值,前面的所有都包括這個節點它自己 以及這個節點的當前值。對於一段區間 l,r 的詢問 修改,只需把l 1這個節...

bzoj1251 序列終結者

time limit 20 sec memory limit 162 mb submit 2971 solved 1188 submit status discuss 網上有許多題,就是給定乙個序列,要你支援幾種操作 a b c d。一看另一道題,又是乙個序列 要支援幾種操作 d c b a。尤其是...

BZOJ 1251 序列終結者

網上有許多題,就是給定乙個序列,要你支援幾種操作 a b c d。一看另一道題,又是乙個序列,要支援幾種操作 d c b a。尤其是我們這裡的某人,出模擬試題,居然還出了一道這樣的,真是沒技術含量 這樣,我也出一道題,我出這一道的目的是為了讓大家以後做這種題目有乙個 庫 可以依靠,沒有什麼其他的意思...