NOIP2015模擬9 12 平方和

2021-08-03 11:08:23 字數 1570 閱讀 5484

給出乙個n個整數構成的序列,有m次操作,每次操作有一下三種:

①insert y x,在序列的第y個數之前插入乙個數x;

②add l r x,對序列中第l個數到第r個數,每個數都加上x;

③query l r,詢問序列中第l個數到第r個數的平方和。

第一行乙個正整數n,表示初始序列長度。

第二行n個整數ai,表示初始序列中的數。

第三行乙個正整數m,表示運算元。

接下來m行,每行一種操作。

對於每乙個query操作輸出答案。由於答案可能很大,請mod 7459後輸出。

5 1 2 3 4 5

5 query 1 3

insert 2 5

query 2 4

add 5 6 7

query 1 6

14 38

304

樣例解釋:

第二次操作後的序列:1,5,2,3,4,5。

第四次操作後的序列:1,5,2,3,11,12。

30%的資料滿足n≤1,000,m≤1,000。

另外20%的資料滿足n≤100,000,m≤100,000,且不存在insert操作。

100%的資料滿足n≤100,000,m≤100,000,且add和insert操作中|x|≤1000,|ai|≤1000。

這題可以用離線線段樹的方法來做,但是比較複雜,碼量較大

我用的是splay做

維護平方和只需要維護和,大小還有平方和就行了 因為(

a+x)

2=a2

+2ax

+x2

第一項通過維護原來的平方和

第二項通過維護和

第三項就是lazy

#include

#include

#include

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

#define n 201000

#define mo 7459

#define ll long long

using namespace std;

int t[n][2],fa[n],lz[n],tot,root,s[n],n;

ll size[n],sum[n],d[n],ssum[n];

void update(int

x)void down(int

x,ll y)

void xc(int

x) }

}int lr(int

x)void rotate(int

x)void splay(int

x,int

y) if(y==0) root=x;

}int kth(int r,int

x)int main()

root=n+2;update(n+2);tot=n+2;

int ac;scanf("%d\n",&ac);

for(;ac;ac--)

if(ch=='i')

if(ch=='a')

}}

NOIP2015模擬11 5 旅行

經過觀察,可以發現題目有乙個比較不錯的性質 1 一條合法的路徑必須由兩條路徑組成,一條是奇數,另一條是偶數。所以我們可以先把每乙個點到達根節點的路徑求出來,深度為奇數的點放進乙個a aa陣列裡,偶數的放進b bb陣列裡,再給他們分別進行排序。然後進行兩兩結合,先把a陣列裡的所有數跟b1b b1 結合...

NOIP2015 神奇的幻方

時間限制 1 sec 記憶體限制 128 mb 提交 163 解決 126 提交 狀態 討論版 命題人 admin 幻方是一種很神奇的n n矩陣 它由數字1,2,3,n n構成,且每行 每列及兩條對角線上的數字之和都相同。當n為奇數時,我們可以通過以下方法構建乙個幻方 首先將1寫在第一行的中間。之後...

NOIP2015模擬11 3 裝飾大樓

給出乙個序列a,ai表示對於乙個h序列來講,以i結尾的lis的長度。h中的數兩兩不等。現在你知道了a刪去乙個數之後的序列b 未知刪掉哪位 求a序列有多少種。a 10 6 好多細節呀!不爽,懶得打題解。可以發現,對於乙個序列a,它滿足條件的前提就是,對於每乙個ai,都存在乙個aj j i 滿足aj 1...