显示原始代码
#include <bits/stdc++.h>
#define ll long long
#define MAXN (ll)1e5 + 10
using namespace std;
ll mod = 1e9 + 7;
ll nums;
ll n;
ll a[MAXN];
struct node {
ll id, val;
} tree[4 * MAXN];
void pushup(ll id) { tree[id].val = tree[id * 2].val + tree[id * 2 + 1].val; }
void build(ll id, ll l, ll r) {
if (l == r) {
tree[id].val = a[l];
return;
}
ll mid = (l + r) >> 1;
build(id * 2, l, mid);
build(id * 2 + 1, mid + 1, r);
pushup(id);
}
ll query(ll id, ll L, ll R, ll l, ll r) {
if (r < L || R < l) {
return 0;
}
if (L <= l && r <= R) {
return tree[id].val;
}
ll mid = (l + r) >> 1;
return query(id * 2, L, R, l, mid) + query(id * 2 + 1, L, R, mid + 1, r);
}
int main() {
cin >> n;
ll sum = 1;
for (int i = 1; i <= n; i++) {
cin >> a[i];
sum *= a[i];
sum %= mod;
}
build(1, 1, n);
for (int i = 1; i <= n; i++) {
ll left = query(1, 1, i - 1, 1, n);
ll right = query(1, i + 1, n, 1, n);
ll res2 = sum / a[i];
cout << left - right << " " << res2 % mod << endl;
}
}