Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- typedef long long int ll;
- int main()
- {
- int n,T;
- scanf("%d %d",&n,&T);
- ll arr[n];
- ll L = 1; //max elem
- ll R = 0; //sum elem
- for(int i = 0 ; i < n ; i ++){
- scanf("%lld",&arr[i]);
- if(arr[i] > L)L = arr[i];
- R += arr[i];
- }
- if(T == 1){
- printf("-1");
- return 0;
- }
- ll aL=L-1,aR=R+1;
- ll l = L , r = R;
- while(l <= r){
- ll m = (l+r)/2;
- ll EnergyNow = 0;
- ll TotalCharge = 0;
- for(int i = 0 ; i < n ; i ++){
- if(EnergyNow >= arr[i]){
- EnergyNow -= arr[i];
- }else{
- EnergyNow = m - arr[i];
- TotalCharge++;
- }
- if(TotalCharge > T){
- break;
- }
- }
- if(TotalCharge <= T){
- if(TotalCharge == T){
- aL = m;
- }
- r = m - 1;
- }else{
- l = m + 1;
- }
- }
- l = L ; r = R;
- while(l <= r){
- ll m = (l+r)/2;
- ll EnergyNow = 0;
- ll TotalCharge = 0;
- for(int i = 0 ; i < n ; i ++){
- if(EnergyNow >= arr[i]){
- EnergyNow -= arr[i];
- }else{
- EnergyNow = m - arr[i];
- TotalCharge++;
- }
- if(TotalCharge > T){
- break;
- }
- }
- if(TotalCharge >= T){
- if(TotalCharge == T){
- aR = m;
- }
- l = m + 1;
- }else{
- r = m - 1;
- }
- }
- // printf("%lld",(aR-aL+1 == ((L-1) - (R+1) + 1) ? -1 : aR-aL+1));
- printf("%lld",aR-aL+1);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement