一開想列舉答案區間[l,
r]
[l,r]
[l,r
],發現這樣列舉會炸。
正解是列舉操作次數,而且注意到最優的操作肯定是先+
++再乘的。
所以我們可以列舉乘的次數,然後二分加的次數,至於找最大區間就可以貪心,o(n
)o(n)
o(n)
求出最大欄位和即可。
注意二分的下界是0,上界不要太大,不然會爆lon
glon
glong\ long
longlo
ng,也不要太小。
時間複雜度:o(n
log2
s)
o(nlog^2s)
o(nlog
2s)
#include
using
namespace std;
typedef
long
long ll;
const
int n=
1e5+
5,m=
2e4+
5,inf=
0x3f3f3f3f
,mod=
1e9+7;
#define mst(a,b) memset(a,b,sizeof a)
#define pii pair
#define fi first
#define se second
#define pb push_back
int n,a,b,s;
int a[n]
;bool
check
(ll x,ll y)
return
false;}
intmain()
if(check
(l,mu)
) ans=
min(ans,
1ll*l*a+
1ll*i*b);}
printf
("%lld\n"
,ans)
;return0;
}