C++ 注意下标 10^5*10^5 = 10^10 > 2*10^9超出 int 表示范围

#include <climits>
#include <iostream>
#include <vector>
using namespace std;

int main() {
    int n;
    cin >> n;
    vector<long long> a;
    while (n--) {
        int ai;
        cin >> ai;
        a.push_back(ai);
    }
    // |i^2-j^2| + |Ai^2-Aj^2| ==> |xi-xj| + |yi-yj| 之间的曼哈顿距离
    // 有 |xi-xj| + |yi-yj| = max(|(xi+yi)-(xj+yj)|, |(xi-yi)-(xj-yj)|)
    // 即 max(xi+yi)-min(xj+yj) 和 max(xi-yi)-min(xj-yj)
    long long max_s=LLONG_MIN, max_d=LLONG_MIN;
    long long min_s=LLONG_MAX, min_d=LLONG_MAX; 
    long long xi, yi, s, d;
    for (int i=1; i<=a.size(); i++) {
        xi = (long long)i*i; yi = a[i-1]*a[i-1];
        s = xi+yi; d = xi-yi;
        if (s>max_s) max_s=s;
        if (s<min_s) min_s=s;
        if (d>max_d) max_d=d;
        if (d<min_d) min_d=d;
    }
    cout << max(max_s-min_s, max_d-min_d);
}
// 64 位输出请用 printf("%lld")