poj 2566 字首和 規律進行尺取

2021-10-01 06:22:37 字數 738 閱讀 1047

傳送門

二分尺取+字首和,需要按一定的規律,不然尺取到一段後,反而縮,就會出現問題,所以需要先記錄每乙個點的編號,然後求字首和,然後進行排序,然後再進行尺取

ac**:

#include

#include

#include

#include

#include

#define ll long long

using namespace std;

const int maxn=

1e5+5;

struct node

temp[maxn]

;bool

cmp(node x,node y)

ll fabs(ll x)

ll a[maxn]

;int main(

) sort(temp,temp+

1+n,

cmp)

;while

(q--)if

(tempx>t)

//縮小區間

else

if(tempx//增大區間

else

if(l==r)}if

(ll>rr)

printf(

"%lld %lld %lld\n"

,ans,ll+

1,rr);}

}}

POJ2566(尺取法 字首和)

題意 給出乙個整數列,求一段子串行之和最接近所給出的t。輸出該段子序列之和及左右端點。思路 做這道題其實是沒思路的,看了大佬的題解後學習到了。一般來說,我們必須要保證數列單調性,才能使用尺取法。預處理出前i個數的字首和,和編號i一起放入pair中,然而根據字首和大小進行排序。由於abs sum i ...

POJ 3061 二分 字首和or尺取法

題目鏈結 題目大意 找到最短的序列長度,使得序列元素和大於s。解題思路 兩種思路。一種是二分 字首和。複雜度o nlogn 有點慢。二分列舉序列長度,如果可行,向左找小的,否則向右找大的。字首和預處理之後,可以o 1 內求和。include cstdio include cstring int su...

牛客訓練賽25 找規律 變相字首和 差分

最關鍵的是找前這個sum i sum i n 1 然後發現每個新的序列差分都不變,求出差分 然後用這個公式維護a 1 用ans i 代表翻i次的第一項是什麼,然後奇偶分情況看是加差分還是減即可 include include include include include define ll lon...