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