題目鏈結
題意:
讓你選取三個位置,使得數列分成四部分,每部分的和都相等,問你能否成功.(ai>=0&&ai<=1e9,)
思路:這個題的話,由於字首和都是遞增的,所以的話我們可以開乙個雙指標,乙個從前往後,乙個從後往前,找到和相等的時候,就將中間剩下的部分二分,找到這個中間位置看是否滿足,同時維護字典序最小.
#includeusing namespace std;
const int maxn=1e5+10;
typedef long long ll;
int n;
ll a[maxn];
ll s[maxn];
int main()
int p1=1,p2=0,p3=n;
int c1=-1,c2=-1,c3=-1;
while(p1+1<=p3+1-4)
if(p1>p3-6)
break;
p2=lower_bound(s+p1+2,s+p3-1,s[p1]+s[p1+1])-s;
if(s[p1]==s[p3-2]-s[p2+1]&&p3-p2>=4)
if(c1p2||(c2==p2&&c3>p3))
}p3--;
}if(c1==-1)
printf("-1\n");
else
printf("%d %d %d\n",c1+1,c2+1,c3-1);
}return 0;
}
二分 差分 思維
二分 差分 思維 當猜了乙個數 x 總共有三種情況 裁判說數大了,那麼裁判說對的取值範圍是 x 裁判說數小了,那麼裁判說對的取值範圍是 x,裁判說數一樣,那麼裁判說對的取值範圍是 x,x 那麼我們只需要求最大有多少個區間重疊了就行了,問題就轉化成了區間的修改,單點查詢,可以考慮差分了。注意題目資料 ...
攀爬 二分, 思維
若存在乙個合法的攀爬序列,則其形式一定是 ak i 1 m ai bi la sum limits m a i b i geq l ak i 1 m ai bi l,於是考慮列舉 a ka k ak 設 di ai b id i a i b i di ai bi 按 d dd從大到小排序,然後 o ...
D Max Median 二分 思維
d.max median 二分 思維 題目大意 給你乙個長度為n的序列,乙個長度為 x 的中位數是 這個序列重新排序之後的 frac 向下取整的位置,讓你求長度至少為 k 的子串行的最大中位數是多少?題解 include using namespace std typedef long long l...