相連的宇宙 題解

2022-08-21 00:06:15 字數 2733 閱讀 7200

閃亮星挑戰第二天。天空萬里無雲,是觀測的好天氣。

如果繼續確認拍攝的資料,就會發現像未知的小行星一樣的天體。

大家非常緊張。這次真的是最後的機會,再次開始拍攝。

蒼很可愛,所以她給出了乙個序列 \(a\) 和一些操作:

\(0\ l\ r\ s\ t\) :在 \(a_l \sim a_r\) 中的每個數依次加上乙個首項為 \(s\) ,公差為 \(k\) 的等差數列。

\(1\ l\ r\) :查詢 $ \sum_^r a_i^\ mod ( 1 \times 10^9 + 7 ) $ 。

第一行兩個整數 \(n,m\) 表示序列長 \(n\) ,有 \(m\) 個操作。

第二行 \(n\) 個整數,表示開始時序列中的元素。

接下來 \(m\) 行,每行若干數,其中第乙個數為 \(opt\) 表示操作編號。

對於每個 \(1\) 操作輸出乙個答案,每個答案佔一行。

樣例輸入

5 3

0 0 0 0 0

0 1 5 1 1

0 1 3 0 1

1 1 5

樣例輸出
76
對於 \(30\%\) 的資料 $1 \leq n,m \leq 1 \times 10^ $ 。

對於另外 \(20\%\) 的資料 $ l = 1\ ,\ r=n$ 。

對於另外 \(20\%\) 的資料 \(s=1\ ,\ k=1\ ,\ a_i=1\)。

對於 \(100\%\) 的資料 \(1 \leq l\leq r\leq n\leq 1 \times 10^\ ,\ 1\leq m\leq 1 \times 10^\ ,\ |s|\ ,\ |k|\ ,\ |a_i| \leq 1 \times 10^\)。

\[\sum_^n i^ = \dfrac

\]洛谷 p1471 方差+洛谷 p1438 無聊的數列

先完成以上兩題,這道題也就很簡單了。(這兩道題是開啟這道題的鑰匙。)

我們可以推一下式子,比如現在我們對1到n加上乙個等差數列後的總和。

\(\sum_^n (a_i+s+(i-1)\times k)^\)

\(\longleftrightarrow \sum_^ a_i^+(s+(i-1)\times k)^+2\times a_i \times (s+(i-1)\times k)\)

\(\longleftrightarrow \sum_^ a_i^+s^2+(i-1)^k^+2s(i-1)k+2a_is+2a_i(i-1)k\)

\(\longleftrightarrow ns^2+\dfrack^2 +(n-1)nsk+\sum_^2a_is+\sum_^ 2a_i(i-1)k+ \sum_^ a_i^\)

\(\longleftrightarrow ns^2+\dfrack^2 +(n-1)nsk+2s\sum_^a_i+2k\sum_^ a_i(i-1)+ \sum_^ a_i^\)

那麼我們就用線段樹來處理三種元素, \(t1\) 記錄 \(a_i^\) , \(t2\) 記錄 \(a_i(i-1)\) , \(t3\) 記錄 \(a_i\) 。

$\longleftrightarrow ns^ + \dfrack^2 + (n-1)nsk + 2st3 + 2kt2 + t1 $

然後用 \(tags\) 記錄首項, \(tagk\) 記錄差量。

最後在標記下傳函式和修改函式稍微注意一下細節,記得取模就行啦。

#include#include#include#include#include#define inf 1ll<<62;

#define ll long long

#define for(x,from,to) for(ll x=from;x<=to;x++)

using namespace std;

const ll maxn=1e5+5;

const ll mod=1e9+7;

ll n,m,opt,x,y,s,k,a[maxn],t1[maxn*4],t2[maxn*4],t3[maxn*4],tag1[maxn*4],tag2[maxn*4];

ll qp(ll b,ll k,ll mod)

templatevoid read(t &x)

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

x=f? -x:x;

}void update(ll p,ll l,ll r)

void build(ll p,ll l,ll r)

ll mid=(l+r)>>1;

build(p<<1,l,mid);build((p<<1)|1,mid+1,r);

update(p,l,r);

}void down(ll p,ll l,ll r)

void change(ll p,ll l,ll r,ll x,ll y,ll s,ll k)

down(p,l,r);

ll mid=(l+r)>>1;

if(y<=mid) change(p<<1,l,mid,x,y,s,k);

else if(x>mid) change((p<<1)|1,mid+1,r,x,y,s,k);

else

update(p,l,r);

}ll qurey(ll p,ll l,ll r,ll x,ll y)

int main()else printf("%lld\n",(qurey(1,1,n,x,y)+mod)%mod);

} return 0;

}

相連的農場

題目描述 farmer john的農場被一次意外事故破壞了,有一些農場與其他的農場之間有道路相連,而有些道路卻已被破壞。這使得farmer john 無法了解到從乙個農場能否到達另乙個農場。你的任務就是幫助farmer john來了解哪些農場是連通的。輸入格式 第一行是點數n 1 n 500 以下n...

宇宙的邊界

宇宙是乙個盒子嗎?如果我們相信,宇宙無界,那麼任何理由都難以讓我們相信,或者任何事物都能夠給我們以最清晰的證明。有界的東西人們一般會盡最大努力的尋找到邊界,但是沒邊際的怎麼辦呢?如果我們相信,宇宙有界,那麼這絕對是乙個讓人類傷心難過的事實。因為自詡為萬物之首的靈長類動物,竟然是某個神秘之 神 手中的...

與圓心相連的直線

include includeusing namespace std class circle 由於在point中宣告友元函式crossover point中引數中用了circle,需要提前宣告 class point 建構函式 friend ostream operator friend void...