單調佇列 1005 HDU 2430 Beans

2021-07-15 01:41:25 字數 1039 閱讀 5481

題意:

有n袋大豆,每袋大豆裡有w[i]個大豆,現在有容量為p的包

問你選任意長度的連續區間,這個區間滿足sum%p<=k|sum是區間的和

答案使sum/p最大

思路:

區間嘛,很容易想到字首和來表示區間和

區間(j+1)~i就是sum[i]-sum[j](為了使sum[j]好表示些,所以前邊用了j+1

判斷此區間%p是否小於<=k

(sum[i]-sum[j])%p==(sum[i]%p-sum[j]%p+p)%p

如果sum[i]%p>=sum[j]%p,這個我們下面討論

如果sum[i]%p

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define lowbit(x) (x&(-x))

typedef

long

long ll;

const

int maxn = 1000005;

const

int inf=(1

<<28)-1;

int w[maxn],min[maxn];

ll sum[maxn];

struct node

mod[maxn];

bool cmp(node u,node v)

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

deque

que;

ll ans=-1;

for(int i=1;i<=n;++i)

printf("case %d: %lld\n",++case,ans);

}return

0;}

hdu2430 單調佇列

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

hdu2430 Beans 單調佇列

hdu2430 beans 單調佇列 題目意思 求乙個sum p k的max sum p 結題報告 技巧,先求出字首和,並記錄前i項對p取餘的值記為x,並記下位置pos 依照先按x從小到大。假設x同樣按pos從小到大排序。這樣,問題就轉換為 求乙個最小的pos使得pos到i的值最大。單調佇列裡面保持...

HDU3415單調佇列

這題是單調佇列的典型運用。至於單調佇列,就是乙個雙端佇列,在隊首 f 出隊,在隊尾 b 出隊入隊,我們要維護整個佇列的元素是單調的,比如,我們要動態查詢從左向右的區間的最小值,那麼我們就要在佇列中維護乙個單調遞增的序列,從左向右列舉,佇列的元素還有乙個id值,代表這個元素在原序列中的位置,然後左邊的...