線段樹 洛谷P1438 無聊的數列

2021-07-30 04:56:43 字數 1028 閱讀 9904

一開始嚇死,給區間加上乙個等差數列???

然後就發現我們只要維護題目裡說的k,d兩個之就好了;

比如我讀入是1,x,y,k,d;

那麼對於在x~y這個區間裡面的小區間l~r

小區間的k,d值相應就是

k』=k+d*(l-x);

d』=d;

這個很顯然把;

換句話說,x~y變成乙個等差序列,那麼對於i小區間l~r顯然也是乙個等差序列;

那麼直接線段樹好了;

比什麼毒瘤資料題好多了;

然後洛谷資料有毒;

#include

#include

#include

#include

#include

using

namespace

std;

struct treet[262144];

int a[100005];

int n,m,x,y,z,k,d;

void maketree(int l,int r,int num)

void init(int num)

num=num<<1;

if(t[num ].r>=x)init(num );

if(t[num+1].l<=y)init(num+1);

}int outit(int num)

int main()

else

}}

洛谷題解還有乙個非常妙的思路;

實際上可以維護乙個差分陣列,不需要進行複雜的計算

只需要寫乙個很普通的滋磁區間加法和區間求和的線段樹就可以了

1操作可以轉化為如下操作:

將a[l]在差分陣列中的對應值d[l]加上k

將a[l+1]至a[r]在差分陣列中的對應值加上d

將a[r+1]對應的d[r+1]減去k+d*(r-l),即減去數列的末項

2操作即在差分陣列中求d[1]至d[p]的和

洛谷 線段樹 P1438 無聊的數列

無聊的yyb總喜歡搞出一些正常人無法搞出的東西。有一天,無聊的yyb想出了一道無聊的題 無聊的數列。k峰 這題不是傻x題嗎 維護乙個數列,支援兩種操作 1 1 l r k d 給出乙個長度等於r l 1的等差數列,首項為k,公差為d,並將它對應加到a l a r 的每乙個數上。即 令a l a l ...

洛谷P1438 無聊的數列 zkw線段樹

題目傳送門 無聊的yyb總喜歡搞出一些正常人無法搞出的東西。有一天,無聊的yyb想出了一道無聊的題 無聊的數列。k峰 這題不是傻x題嗎 維護乙個數列,支援兩種操作 1 1 l r k d 給出乙個長度等於r l 1的等差數列,首項為k,公差為d,並將它對應加到a l a r 的每乙個數上。即 令a ...

洛谷 P1438 無聊的數列

題目背景 無聊的yyb總喜歡搞出一些正常人無法搞出的東西。有一天,無聊的yyb想出了一道無聊的題 無聊的數列。k峰 這題不是傻x題嗎 題目描述 維護乙個數列,支援兩種操作 1 1 l r k d 給出乙個長度等於r l 1的等差數列,首項為k,公差為d,並將它對應加到a l a r 的每乙個數上。即...