思路:看到這題,我腦海中浮現了一顆樹~每個葉子都是乙個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 了 首先二進位制列舉子集,對於每個當前狀態,考慮可以從哪些狀態轉移過來,這時候再列舉他的...