可持久化動態圖上樹狀陣列維護01揹包(牛客網的一道傻逼題)
哈哈哈……題面已經告訴你做法了
這場比賽前無數名兩三分鐘就過了這道A題……當時看到題的時候笑抽我了……
維護尼瑪的揹包,直接貪心啊……
如果序列都是正數的話,每個數的刪除代價中的$i$為$1$當然是最優的。又因為要求刪除所有的數,所以這可以做到,每次刪除序列的第一個數就完了。
然後下意識地看了看資料,$n$沒問題,但是序列有負數……
我們知道,負數的刪除代價中的$i$越大越好,所以一開始先把序列中所有負數從後往前刪除,然後把剩下的正數從前往後刪除。
$0$沒有貢獻,怎麼算都行。
再確認一下資料,發現答案是$(-2^{64},2^{64})$區間內的,而$long long$的範圍是$(-2^{63},2^{63})$,會爆掉。
所以開一個$unsigned\space long long$,單開個$bool$記它的正負號。
恭喜你解鎖成就:完成一道可持久化動態圖上樹狀陣列維護01揹包難題!
相關推薦
可持久化動態圖上樹狀陣列維護01揹包(牛客網的一道傻逼題)
題目 哈哈哈……題面已經告訴你做法了 這場比賽前無數名兩三分鐘就過了這道A題……當時看到題的時候笑抽我了…… 維護尼瑪的揹包,直接貪心啊…… 如果序列都是正數的話,每個數的刪除代價中的$i$為$1$當然是最優的。又因為要求刪除所有的數,所以這可以做到,每次刪除序列的第一個數就完了。 然後下意識地看了
牛客練習賽29-A——可持久化動態圖上樹狀陣列維護01揹包(貪心)
題目連結 題目描述 你有一個長度為 n 序列 {a}(序列下標從1開始) ,每次可以從任意位置 i 花費 ai*i 的代價來把 ai 刪除。 注意,刪除後 ai 後面的數會依次向前補上(下標 -1 ) 。 求把整個序列刪完的最小代價。 輸入描述: 第一行一個整
牛客練習賽29-A-可持久化動態圖上樹狀陣列維護01揹包(思維)
題目描述 你有一個長度為 n 序列 {a}(序列下標從1開始) ,每次可以從任意位置 i 花費 ai*i 的代價來把 ai 刪除。 注意,刪除後 ai 後面的數會依次向前補上(下標 -1 )
可持久化動態圖上樹狀陣列維護01揹包
來源:牛客網 —牛客練習賽29-A 解題思路:如果該序列中有負數,從下標大依次向下標小的刪數(從右向左),這樣可以保證代價最小,此時為ans += i*m。負 數全部刪完後,從下標小依次向下標大的刪數(從左向右),此時正數所乘的下標最小,都為1,ans += m;
cf#348-E. Little Artem and Time Machine-樹狀陣列+map節點(動態開點樹狀陣列)
http://codeforces.com/contest/669/problem/E 題意: 題意:有三個操作 1 x y,在第x秒插入一個y 2 x y,在第x秒移走一個y 3 x y, 問第x秒有多少個y 這個操作3可以問之前的時間,也
bzoj 3730 震波——動態點分治+樹狀陣列
題目:https://www.lydsy.com/JudgeOnline/problem.php?id=3730 查詢一個點可以轉化為查詢點分樹上自己到根的路徑上每個點對應範圍答案。可用樹狀陣列 f 。 但有重複,所以再開一個樹狀陣列 g 記錄上一層重心的含自己的那棵子樹裡各種距離的點值和。 查詢的時候
bzoj 4372 爍爍的遊戲——動態點分治+樹狀陣列
題目:https://www.lydsy.com/JudgeOnline/problem.php?id=4372 和 bzoj 3070 震波 是一個套路。注意區間修改的話,樹狀陣列不能表示 dis = 0 的位置,所以要手動改父親的點權陣列。 #include<cstdio> #inc
HDU 4918 Query on the subtree(動態點分治+樹狀陣列)
題意 給定一棵 \(n\) 個節點的樹,每個節點有點權。完成 \(q\) 個操作——操作分兩種:修改點 \(x\) 的點權、查詢與 \(x\) 距離小於等於 \(d\) 的權值總和。 \(1 \leq n,q \leq 10^5\) 思路 從最簡單的情況分析——只有一次查詢。當然一遍 \(O(n)\)
【11.2校內測試】【狀壓】【矩陣字首和】【樹狀陣列逆序對(題意轉換)】
Solution 簽到水題,直接狀壓列舉所有情況算出答案即可。 Code #include<bits/stdc++.h> #define LL long long using namespace std; inline LL read() { LL x =
藍書(演算法競賽進階指南)刷題記錄——POJ3468 A Simple Problem with Intergers(樹狀陣列維護差分)
題目:poj3468. 題目大意:給定一個序列a,要求支援: 1.格式C a b c,表示將[a,b]的權值都加上c. 2.格式Q a b,表示查詢[a,b]的權值和. 線段樹裸題(我像個傻子一樣寫了個LCT做了一遍),可是我們這裡不用線段樹,我們討論樹狀陣列的解法. 我們已
Codeforces1076E. Vasya and a Tree(dfs+離線+樹狀陣列維護)
題目連結:傳送門 題目: E. Vasya and a Tree time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output
樹狀陣列的區間加法(差分)
應用差分原理,實現樹狀陣列區間加法 差分:a區間[1, 2, 3, 4, 5],則差分割槽間為[1, 1, 1, 1, 1]即bn = an - an-1,an = b1 +…+ bn 如果對區間[2, 4]都加上2,則a[1, 5, 6, 7, 5], 差分割槽間[1, 4, 1,
C. 痛苦的 01 矩陣 (推公式,樹狀陣列維護)
現有一個 n×n 的 01 矩陣 M。 定義 cost(i,j) 為:把第 i 行和第 j 列全部變成 1 最少需要改動多少個元素。 定義矩陣的痛苦值 pain(M) 為: pain(M)=(∑i=1n∑j=1n(cost(i,j))2)mod(109+7) 要求
Wannafly模擬賽4 A 題 Laptop 【二維偏序問題 + 樹狀陣列維護】
傳送門 //這個是經典的二維偏序問題, 偏序問題也是比較難的一部分, 當上了三維以後, 就要不斷用cdq分治以及一些高階資料結構來解決. 但是這道題還是比較簡單的, 只是一個普通的二維偏序, 所以直接
POJ 2481 Cows 樹狀陣列 單點更新 (每個集合是幾個集合的真子集)
Description Farmer John's cows have discovered that the clover growing along the ridge of the hill (which we can think of as a one-dimensi
【LeetCode】線段樹 segment-tree(共9題)+ 樹狀陣列 binary-indexed-tree(共5題)
第一部分---線段樹:https://leetcode.com/tag/segment-tree/ p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica } 【218】The Skyline Problem&n
線段樹或樹狀陣列求逆序數(附例題)
線段樹或樹狀陣列求逆序數 假設給你一個序列 6 1 2 7 3 4 8 5, 首先我們先手算逆序數, 設逆序數為 N; 6的前面沒有比他大的數 N +=0 1的前面有一個比他大的數 N+=1 2
樹狀陣列總結——詳解(單點/區間查詢, 單點/區間修改, 逆序對)
2017-06-13 17:24 64人閱讀 評論(0)收藏舉報 1、概述 樹狀陣列(binary indexed tree),是一種設計新穎的陣列結構,它能夠高效地獲取陣列中連續n個數的和。概括說,樹狀陣列通常用於解決以下問題:陣列{a}中的元素可能不斷地被
【codeforces 981E. Addition on Segments】【線段樹】【bitset 01揹包的妙用優化】【好題】【操作集區間的最大值能否構成】
【連結】 http://codeforces.com/contest/981/problem/E 【題意】 給定q個區間加的操作,求出這q個操作的所有子集的所有最大值,在[1,n]的範圍內 【分析】 要知道一個數能否可由某個操作集得到,只要知道對於某個
劍指offer C++題解(牛客網):二維陣列中的查詢
【二維陣列中的查詢】:在一個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數。 class Solution { public: bool Find