問題描述
對於乙個數字序列a,並且有若干詢問。對於每個詢問,要求求出一段在序列a中非空 的連續段使得這一段數字的總和的絕對值盡量接近p。輸入格式
第一行2個數n、t,表示序列的長度和詢問的個數。輸出格式接下來一行n個整數,表示a序列。 接下來t行,每行乙個數p表示詢問。
共輸出t行,每行對應乙個詢問的答案。樣例輸入輸出3個數:第乙個數為能夠實現的最接近p 的數,後面兩個數l、r表示a序列中的l到 r這一段數能實現這個答案。
如果存在多解,輸出l最小的解;
如果還有多解,輸出r最小的解。
5 1樣例輸出-10 -5 0 5 10
3
5 2 2資料範圍
30%的資料 1<=n<=1,000。此題容易想到求出字首和陣列su60%的資料 1<=n<=10,000。
100%的資料 1<=n<=100,000,a 序列中數字絕對值<=10,000,t<=100,詢問的 數字<=10^9
m ,鑑於複雜度,需要乙個o(
n)的演算法,但此時遇到的問題就是,字首和陣列並不具有單調性。
注意到題目中的絕對值,於是學習到了乙個大膽的操作,將字首和陣列排序,強行維護單調性,而且位置座標並不會對答案產生影響,於是就單調dp即可。
**:
#include
#include
#include
#define ll long long
using
namespace
std;
struct node;
bool cmp(node a,node b)
printf("%lld %lld %lld\n",ans,l+1,r);
}int main()
NKOJ3545 單調佇列
單調佇列是也。nkoj3545 我們發現,本題的時間複雜度必須是線性的,時間複雜度只能是 o nt 於是我們考慮如果如果原函式是單調的,字首和也是單調的,那麼本題就很好搞了。在這種特殊情況下,我們利用單調佇列,乙個指向開頭乙個指向末尾。由於sum r sum l p時,向右移動r不會對答案進行更新 ...
NKOJ 3861 子矩陣(矩陣dp 單調佇列)
問題描述 小 a 有乙個 n m 的矩陣,矩陣中 1 n m 這 n m 個整數均出現過一次。現在小 a 在這個矩陣內選擇乙個子矩陣,其權值等於這個子矩陣中的所有數的最 小值。小 a 想知道,如果他選擇的子矩陣的權值為 i 1 i n m 那麼他選擇 的子矩陣可能有多少種?小 a 希望知道所有可能的...
NKOJ 3860 分隊問題(DP 字首和優化)
問題描述 給定 n 個選手,將他們分成若干只隊伍。其中第 i 個選手要求自己所屬的隊 伍的人數大等於 a i 人。在滿足所有選手的要求的前提下,最大化隊伍的總數。注 每個選手屬於且僅屬於一支隊伍。輸入格式 第一行乙個整數 n,表示人數。以下 n 行,每行乙個整數表示 a i 輸出格式 輸出隊伍總數的...