fork(1) download
  1. #include<stdio.h>
  2. typedef long long lld;
  3.  
  4. inline int g(int x) {
  5. int le = 1, ri = x, ans = ri;
  6. x += x;
  7. while (le <= ri) {
  8. lld mid = (le + ri) >> 1;
  9. if (mid * (mid + 1) >= x) ans = mid, ri = mid - 1;
  10. else le = mid + 1;
  11. }
  12. if (x == (lld)(ans)*(ans+1)) return ans;
  13. else --ans;
  14. x /= 2;
  15. int sum = ((lld)(ans))*(ans+1)/2;
  16. return ans%2 ? (x-sum)%2+ans+1 : -2*((x-sum)%2)+ans+3;
  17. }
  18.  
  19. int main()
  20. {
  21. int n;
  22. scanf("%d", &n);
  23. printf("%d\n", g(n<0?-n:n));
  24. return 0;
  25. }
  26.  
Success #stdin #stdout 0s 2172KB
stdin
-3646397
stdout
2701