題目鏈結
紫書243頁例題,採用數形結合的方法,用deque來維護乙個單調結點的佇列,即不包含上凸點的序列,每次都更新結果,記錄最優解。
#includeusing namespace std;
const int maxn = 100050;
int n, l;
char st[maxn];
int s[maxn];
dequeque;
//a,b對應直線斜率大於c,d對應直線,返回值》0,小於則返回值<0,等於返回0
int check(int a, int b, int c, int d)
int main()
int ansl = 0, ansr = l;//ansl記錄左端點的前一位
for (int i = l; i <= n; ++i)
//加入j
que.push_back(j);
//把不可能是解的開頭若干項去掉
while (que.size() > 1)
//更新結果
int res = check(que[0], i, ansl, ansr);
if (res > 0 || 0 == res && i - que[0] < ansr - ansl)
} printf("%d %d\n", 1 + ansl, ansr);
} return 0;
}
uva 1451 Average 數形結合
數形結合那篇 的例題,維護乙個下凸佇列,一開始為了省事,用了棧,但是原理上有問題,因為有可能正好起點為上凸點的情況,wa了好多次 author jxy lang c c university china,xidian university if you need to reprint,please ...
uva 1451 Average 斜率優化
題意 給出乙個長度為n的字串 01串 要求找到長度至少為k的連續子串的最大平均值。n 1e5。解 對於任意一段 le,ri 的平均值,都有如下求法 sum ri sum le 1 ri le 1 將 le 1,sum le 1 看成是乙個點,是點le在圖上的點。對於每個點i,在圖上對應的點都是 i ...
Uva136 醜數 優先佇列
找出第1500個素因子只能有2或3或5的數。懵逼了吧,並不是素因子篩,用2,3,5去篩並不能得到滿足醜數要求的數,例如14就篩不掉。優先佇列每次取乙個最小的數x,2x,3x,5x,都是醜數,但是每次要判斷是否有重數 set 取1500,每次都是取出最小的數,取1500次之後就是第1500個數。inc...