场上思路

将数列视为公差为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;
}