• Source
    1. #include <iostream>
    2. #include <vector>
    3. using namespace std;
    4.  
    5. long X;
    6. vector <long> v;
    7.  
    8. void read ()
    9. {
    10. cin>>X;
    11. }
    12.  
    13. void init ()
    14. {
    15. long S=0;
    16. int n=0;
    17. while (1)
    18. {
    19. if (S>X) break;
    20. n++;
    21. S=(n*n+n)/2;
    22. v.push_back(S);
    23. }
    24. }
    25.  
    26. int BSearch (int front, int back, long x)
    27. {
    28. if (front<=back)
    29. {
    30. int mid=(front+back)/2;
    31. if (v[mid]==x) return mid;
    32. else if (v[mid]>x) return BSearch (front, mid-1, x);
    33. else if (v[mid]<x) return BSearch (mid+1, back, x);
    34. return -1;
    35. }
    36. return -1;
    37. }
    38.  
    39. int main ()
    40. {
    41. read ();
    42. init ();
    43. int kt=0;
    44. for (int i=0; i<v.size(); i++)
    45. {
    46. if (BSearch (0, v.size()-1, X-v[i])!=-1)
    47. {
    48. kt=1;
    49. break;
    50. }
    51. }
    52. if (kt==1) cout<<"YES";
    53. else cout<<"NO";
    54. return 0;
    55. }