給出乙個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...