场上思路
将数列视为公差为1的等差数列,二分+等差数列通项公式。
改进
注意到最终只需要凑出n,且l和r与n的范围相同,考虑到n=-(n-1)-(n-2)-...+0+1+...+(n-1)+n,那么l和r就可以O(1)求出。
做题
#include<cstdio> #include<iostream> #define ll long long using namespace std; int main(){ int t; scanf("%d",&t); while(t--){ ll n; cin>>n; cout<<-(n-1)<<" "<<n<<endl; } return 0; }