閃亮星挑戰第二天。天空萬里無雲,是觀測的好天氣。
如果繼續確認拍攝的資料,就會發現像未知的小行星一樣的天體。
大家非常緊張。這次真的是最後的機會,再次開始拍攝。
蒼很可愛,所以她給出了乙個序列 \(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...