#pragma GCC optimize ("Ofast")
#include<bits/stdc++.h>
using namespace std;
template < class T> inline T getFirst( multiset< T> & a) {
return * ( a.begin ( ) ) ;
}
template < class T> inline T popLast( multiset< T> & a) {
T res;
typename multiset< T> :: iterator it;
it = a.end ( ) ;
it-- ;
res = * it;
a.erase ( it) ;
return res;
}
template < class T> inline T getFirst( set< T> & a) {
return * ( a.begin ( ) ) ;
}
template < class T> inline T popLast( set< T> & a) {
T res;
typename set< T> :: iterator it;
it = a.end ( ) ;
it-- ;
res = * it;
a.erase ( it) ;
return res;
}
template < class S, class T> inline S chmin( S & a, T b) {
if ( a> b) {
a= b;
}
return a;
}
#define main dummy_main
int main( ) {
return 0 ;
}
#undef main
class Solution{
public :
int minimumDeviation( vector< int > & nums) {
int i;
long long res = 4611686016279904256LL;
long long mx;
set< long long > s;
for ( i= ( 0 ) ; i< ( nums.size ( ) ) ; i++ ) {
if ( nums[ i] % 2 ) {
s.insert ( nums[ i] * 2 ) ;
}
else {
s.insert ( nums[ i] ) ;
}
}
for ( ;; ) {
if ( s.size ( ) == 1 ) {
res = 0 ;
break ;
}
mx = popLast( s) ;
chmin( res, mx - getFirst( s) ) ;
if ( mx % 2 ) {
break ;
}
s.insert ( mx/ 2 ) ;
}
return res;
}
}
;
// cLay version 20201206-1
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// class Solution {
// public:
// int minimumDeviation(vector<int>& nums) {
// ll res = ll_inf, mx;
// set<ll> s;
// rep(i,nums.size()) s.insert(if[nums[i]%2, nums[i] * 2, nums[i]]);
//
// for(;;){
// if(s.size()==1) res = 0, break;
// mx = popLast(s);
// res <?= mx - getFirst(s);
// if(mx % 2) break;
// s.insert(mx/2);
// }
//
// return res;
// }
// };
I3ByYWdtYSBHQ0Mgb3B0aW1pemUgKCJPZmFzdCIpCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnRlbXBsYXRlPGNsYXNzIFQ+IGlubGluZSBUIGdldEZpcnN0KG11bHRpc2V0PFQ+ICZhKXsKICByZXR1cm4gKihhLmJlZ2luKCkpOwp9CnRlbXBsYXRlPGNsYXNzIFQ+IGlubGluZSBUIHBvcExhc3QobXVsdGlzZXQ8VD4gJmEpewogIFQgcmVzOwogIHR5cGVuYW1lIG11bHRpc2V0PFQ+OjppdGVyYXRvciBpdDsKICBpdCA9IGEuZW5kKCk7CiAgaXQtLTsKICByZXMgPSAqaXQ7CiAgYS5lcmFzZShpdCk7CiAgcmV0dXJuIHJlczsKfQp0ZW1wbGF0ZTxjbGFzcyBUPiBpbmxpbmUgVCBnZXRGaXJzdChzZXQ8VD4gJmEpewogIHJldHVybiAqKGEuYmVnaW4oKSk7Cn0KdGVtcGxhdGU8Y2xhc3MgVD4gaW5saW5lIFQgcG9wTGFzdChzZXQ8VD4gJmEpewogIFQgcmVzOwogIHR5cGVuYW1lIHNldDxUPjo6aXRlcmF0b3IgaXQ7CiAgaXQgPSBhLmVuZCgpOwogIGl0LS07CiAgcmVzID0gKml0OwogIGEuZXJhc2UoaXQpOwogIHJldHVybiByZXM7Cn0KdGVtcGxhdGU8Y2xhc3MgUywgY2xhc3MgVD4gaW5saW5lIFMgY2htaW4oUyAmYSwgVCBiKXsKICBpZihhPmIpewogICAgYT1iOwogIH0KICByZXR1cm4gYTsKfQojZGVmaW5lIG1haW4gZHVtbXlfbWFpbgppbnQgbWFpbigpewogIHJldHVybiAwOwp9CiN1bmRlZiBtYWluCmNsYXNzIFNvbHV0aW9uewogIHB1YmxpYzoKICBpbnQgbWluaW11bURldmlhdGlvbih2ZWN0b3I8aW50PiYgbnVtcyl7CiAgICBpbnQgaTsKICAgIGxvbmcgbG9uZyByZXMgPSA0NjExNjg2MDE2Mjc5OTA0MjU2TEw7CiAgICBsb25nIGxvbmcgbXg7CiAgICBzZXQ8bG9uZyBsb25nPiBzOwogICAgZm9yKGk9KDApO2k8KG51bXMuc2l6ZSgpKTtpKyspewogICAgICBpZihudW1zW2ldJTIpewogICAgICAgIHMuaW5zZXJ0KG51bXNbaV0gKiAyKTsKICAgICAgfQogICAgICBlbHNlewogICAgICAgIHMuaW5zZXJ0KG51bXNbaV0pOwogICAgICB9CiAgICB9CiAgICBmb3IoOzspewogICAgICBpZihzLnNpemUoKT09MSl7CiAgICAgICAgcmVzID0gMDsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBteCA9IHBvcExhc3Qocyk7CiAgICAgIGNobWluKHJlcywgbXggLSBnZXRGaXJzdChzKSk7CiAgICAgIGlmKG14ICUgMil7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgcy5pbnNlcnQobXgvMik7CiAgICB9CiAgICByZXR1cm4gcmVzOwogIH0KfQo7Ci8vIGNMYXkgdmVyc2lvbiAyMDIwMTIwNi0xCgovLyAtLS0gb3JpZ2luYWwgY29kZSAtLS0KLy8gI2RlZmluZSBtYWluIGR1bW15X21haW4KLy8ge30KLy8gI3VuZGVmIG1haW4KLy8gCi8vIGNsYXNzIFNvbHV0aW9uIHsKLy8gcHVibGljOgovLyAgIGludCBtaW5pbXVtRGV2aWF0aW9uKHZlY3RvcjxpbnQ+JiBudW1zKSB7Ci8vICAgICBsbCByZXMgPSBsbF9pbmYsIG14OwovLyAgICAgc2V0PGxsPiBzOwovLyAgICAgcmVwKGksbnVtcy5zaXplKCkpIHMuaW5zZXJ0KGlmW251bXNbaV0lMiwgbnVtc1tpXSAqIDIsIG51bXNbaV1dKTsKLy8gCi8vICAgICBmb3IoOzspewovLyAgICAgICBpZihzLnNpemUoKT09MSkgcmVzID0gMCwgYnJlYWs7Ci8vICAgICAgIG14ID0gcG9wTGFzdChzKTsKLy8gICAgICAgcmVzIDw/PSBteCAtIGdldEZpcnN0KHMpOwovLyAgICAgICBpZihteCAlIDIpIGJyZWFrOwovLyAgICAgICBzLmluc2VydChteC8yKTsKLy8gICAgIH0KLy8gCi8vICAgICByZXR1cm4gcmVzOwovLyAgIH0KLy8gfTsK