我們先來觀察一下題目中給出的公式
$$a'_i=(\sum_^na_j)-a_i$$
通過這個公式推一下經過再編號後的序列的總和,因為我們推出這個和之後可以進行下一次計算。
$$\sum_^na'_i=\sum_^n((\sum_^na_j)-a_i)$$
變形一下
$$\sum_^na'_i=n\times (\sum_^na_j)-\sum_^na_i$$
$$\sum_^na'_i=(n-1)\times \sum_^na_i$$
emmmm,這個結論貌似很有用的樣子,我們可以通過上面的推導預處理處每一次變化後整個序列的總和。
在觀察一下原來的序列,每一次再編號他們的每個數和第乙個數的差的絕對值是不變的。並且在奇數次的變化後為$a_1-a_j$,偶數次變化後是$a_j-a_1$。
既然是這樣子,那我們就可以再通過之前預處理的總和在處理出每一次改變後的第乙個值。通過這個值我們可以$o(1)$的對每乙個位置上的數值進行詢問。
這樣的話總時間複雜度是$o(t)$的
#include #include#include
#include
#include
#include
#include
using
namespace
std;
#define ll long long
#define mod int(1e9+7)ll a[
100010],n,m,sum[100100
];ll ans[
100001][2
],num;
intmain()
ans[
0][1]=a[1
];
for(int i=1;i<=100001;i++)
for(int i=1;i<=m;i++)
}
牛客練習賽25
我好菜啊。本來是奔著t恤去的 要求 ans ni 1 j i1 ans i 1n j i 1注意到我們並不需要什麼奇蹟銀殼,只需要交換列舉主體就可以 n做了 include include define rep i,st,ed for int i st i ed i typedef long lon...
20180824牛客練習賽25 A
q次詢問,每次給乙個x,問1到x的因數個數的和。輸入描述 第一行乙個正整數q 接下來q行,每行乙個正整數 x 輸出描述 共q行,每行乙個正整數表示答案 輸入 4 1 2 3 10 輸出 1 3 5 27 備註 1 q 10 1 x 1e9 方法1 尤拉篩列舉 絕逼炸了,無論是空間還是時間方法2 列舉...
牛客練習賽25 最長區間
其中表示left len right len可以用乙個len i 表示 len i 表示包括i的在i之前的最長遞增序列 用len陣列可以很方便得記錄到從x往左的left len等於多少 然後向由可以推出right len cnt i 計算每乙個長度i的序列有多少個 其中 乙個i的子長度的序列也會記錄...