hdu2430 Beans 單調佇列

2022-07-30 05:15:09 字數 978 閱讀 1856

//    hdu2430 beans 單調佇列

//// 題目意思:

// 求乙個sum%p<=k的max(sum/p)

//// 結題報告:

// 技巧,先求出字首和,並記錄前i項對p取餘的值記為x,並記下位置pos

// 依照先按x從小到大。假設x同樣按pos從小到大排序。

這樣,問題就轉換為

// 求乙個最小的pos使得pos到i的值最大。

//// 單調佇列裡面保持的就是對於當前的i最小的pos值(滿足pos到i區間的sum是滿足條件的)

// 由於陣列遞增,這樣求得的sum一定是最大的,這樣就能夠了

//// 感悟:

//// 這題應該也能夠用線段樹做,做的話也是以i為端點,查詢最小的pos。而這個pos在

// sum[i]%p-k,sum[i]%p之間(由於k>=(sum[i]-sum[pos])%p>0),維護最小值。

待我練練線段樹

// 再加上自己更深的理解而單調佇列也能實現以i為結尾的區間之前的最小的pos值,

// 感覺單調佇列實在非常巧妙

#include #include #include #include typedef long long ll;

using namespace std;

const int max_n = 1e6 + 100;

struct node a[max_n],deq[max_n];

ll f[max_n];

int t;

int n,p,k;

bool cmp(node a,node b)

void input()

sort(a+1,a+n+1,cmp);

}void solve()

}cout << mx << endl;

}int main()

}

單調佇列 1005 HDU 2430 Beans

題意 有n袋大豆,每袋大豆裡有w i 個大豆,現在有容量為p的包 問你選任意長度的連續區間,這個區間滿足sum p k sum是區間的和 答案使sum p最大 思路 區間嘛,很容易想到字首和來表示區間和 區間 j 1 i就是sum i sum j 為了使sum j 好表示些,所以前邊用了j 1 判斷...

hdu2430 單調佇列

這題用單調佇列需要分析好,當然也是自己思維不靈活,老想套用其他題的方法。題意 求出字串和,使其滿足sum p k使sum p最大 單調佇列,自己理解主要在於每次更新操作覆蓋掉無用的部分,即根據單調關係那部分在以後的判斷都是無用的那一部分,從而使效率提高,而不要盲目的去退隊從而將有用的部分去掉使答案錯...

HDU 2845 Beans 動態規劃

對於每乙個點由其上一步的結點傳遞過來,存在最優子結構,即對於正確路徑的上的任意一點將都是最優的,並且存在最優子結構。保留最優值的時候注意方法,不然tle。如下 include include include include include define maxn 200000 using names...