水,按题意打表就好了,注意vis[]数组要开大点 就好了.
#include <iostream>
#include <cmath>
#include <cstring>
#define MAXN 500005
#define LL long long
using namespace std;
LL sq[MAXN];
LL vis[MAXN*10];
void init()
{
LL i;
memset(vis,0,sizeof(vis));
sq[0]=0;
vis[0]=1;
for(i=1;i<=500000;i++)
{
LL tem=sq[i-1]-i;
if(tem>0&&vis[tem]==0)
{
sq[i]=tem;
vis[tem]=1;
}
else
{
sq[i]=sq[i-1]+i;
vis[sq[i-1]+i]=1;
}
}
}
int main()
{
int n;
init();
while(cin>>n&&n!=-1)
{
cout<<sq[n]<<endl;
}
return 0;
}