牛客練習49D 差分巧解區間 遞迴的處理

2021-09-25 01:36:49 字數 856 閱讀 1562

思路:看到這題,我腦海中浮現了一顆樹~每個葉子都是乙個1型別的操作。。。想到了n^2的演算法,記錄下每個操作時,之前所有操作的操作次數。dp[i][j]:i操作時,j操作一共執行了多少次~然而並沒有什麼用。。。

看到題解發現真厲害%%%;用字尾差分(tg[i])記錄下第i次操作和第i+1次操作的運算元之差,每次遇到2的操作時,令tg[l-1]減去當前運算元(其實很好算當前運算元,都是當前次數+tg[i])和tg[r]加上當前運算元(即差分導致區間更新);每次的運算元已經知道了,如果是1的操作,按照相同的辦法區間更新原本的陣列就可以了~差分真是個好東西%%%%%;

**如下:

/*

*/#define local

#include#include#include#include#include#include#include#include#includeusing namespace std;

#define maxn 100005

#define inf 40000000

#define ll long long

struct node

op[maxn];

int tg[maxn];//i操作的操作次數與i+1操作的操作次數的差分

int add[maxn];//i數與i+1數的差分,用字首差分也可以,我試試而已~

const int mod=1e9+7;

int main()

else

}stackans;

int pre=0;

for(int i=n;i;i--)

while(!ans.empty())

return 0;

}

牛客練習賽49 D 筱瑪愛線段樹 差分

給定乙個長度為n n 1e5 的陣列a,剛開始每一項的值均為0。支援以下兩種操作,操作共m m 1e5 次 1 l r 將al ar的每一項的值加上1。2 l r 執行操作編號在 l,r 內的所有操作各一次,保證r小於當前操作的編號。m次操作結束後,你要告訴馬爺a陣列變成什麼樣子了。由於答案可能會很...

差分 牛客 HJ澆花

補一道差分基礎題 時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k 64bit io format lld hj養了很多花 99999999999999999999999999999999999盆 並且喜歡把它們排成一排,編號0 99999999999999...

牛客練習賽49 solution

水題 有15本書,和15個 你要分配這15個 使得總價最小.此外,有一些 方案,每個方案是一些書的集合,表示只要買全了這個方案的書,則最便宜的一本書免費 你最後選擇的所有方案不能有重複的書.第一感覺就是狀壓dp 了 首先二進位制列舉子集,對於每個當前狀態,考慮可以從哪些狀態轉移過來,這時候再列舉他的...