題意:
有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值,代表這個元素在原序列中的位置,然後左邊的...