#include <algorithm>
#include <deque>
#include <iostream>
#include <iomanip>
#include <set>
#include <vector>
using namespace std;
#define DBG(x) { cout << left << setw(40) << setfill(' ') << #x << (x) << endl; }
int main()
{
vector<int> vec{1,-2,3,-4,0,0,0,10,-10};
auto cmp = [](int l, int r){
return (l == 0) ^ (r == 0) ? r == 0 : less<int>()(l,r);
};
auto cmp_or = [](int l, int r){
return (l == 0) || (r == 0) ? r == 0 : less<int>()(l,r);
};
sort(begin(vec),end(vec),cmp);
for(int v : vec){
cout << v << ", ";
}
cout << endl;
int a = 0;
int b = 0;
DBG(cmp(a,b));
DBG(cmp(b,a));
DBG(cmp_or(a,b));
DBG(cmp_or(b,a));
return 0;
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGRlcXVlPgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxpb21hbmlwPgojaW5jbHVkZSA8c2V0PgojaW5jbHVkZSA8dmVjdG9yPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgREJHKHgpIHsgY291dCA8PCBsZWZ0IDw8IHNldHcoNDApIDw8IHNldGZpbGwoJyAnKSA8PCAjeCA8PCAoeCkgPDwgZW5kbDsgfQoKCmludCBtYWluKCkKewoJdmVjdG9yPGludD4gdmVjezEsLTIsMywtNCwwLDAsMCwxMCwtMTB9OwoKCWF1dG8gY21wID0gW10oaW50IGwsIGludCByKXsKCQlyZXR1cm4gKGwgPT0gMCkgXiAociA9PSAwKSA/IHIgPT0gMCA6IGxlc3M8aW50PigpKGwscik7Cgl9OwoKCWF1dG8gY21wX29yID0gW10oaW50IGwsIGludCByKXsKCQlyZXR1cm4gKGwgPT0gMCkgfHwgKHIgPT0gMCkgPyByID09IDAgOiBsZXNzPGludD4oKShsLHIpOwoJfTsKCglzb3J0KGJlZ2luKHZlYyksZW5kKHZlYyksY21wKTsKCglmb3IoaW50IHYgOiB2ZWMpewoJCWNvdXQgPDwgdiA8PCAiLCAiOwoJfQoJY291dCA8PCBlbmRsOwoKCWludCBhID0gMDsKCWludCBiID0gMDsKCglEQkcoY21wKGEsYikpOwoJREJHKGNtcChiLGEpKTsKCURCRyhjbXBfb3IoYSxiKSk7CglEQkcoY21wX29yKGIsYSkpOwoKCXJldHVybiAwOwp9Cgo=
-10, -4, -2, 1, 3, 10, 0, 0, 0,
cmp(a,b) 0
cmp(b,a) 0
cmp_or(a,b) 1
cmp_or(b,a) 1