# B. Difference Array
link : https://codeforces.com/contest/1707/problem/B
tóm tắt : cho a[], sort sẵn, tạo b[i] = a[i] - a[i - 1] và n = n - 1, hỏi sau n - 1 lần như vậy thì phần tử cuối là số mấy
ý tưởng : các số phân biệt xuất hiện trong các thao tác ko quá nhiều, cứ nén lại là được
code AC
:::spoiler
```cpp
#include<bits/stdc++.h>
#define rep(i, a, b) for (int i = (a); i <= (b); ++i)
#define rev(i, a, b) for (int i = (a); i >= (b); --i)
#define ll long long
using namespace std;
const int mxn = 5e5 + 8;
int mark[mxn], a[mxn], b[mxn], cnt[mxn], cnt2[mxn];
int x = 1;
int ti(int t, int lan)
{
if (lan == 0) return 0;
if (mark[t] != x)
{
mark[t] = x;
cnt2[t] = lan;
return 1;
} else cnt2[t] += lan;
return 0;
}
int main(){
//freopen("D:\\test.txt", "r", stdin);
//freopen("D:\\test2.txt", "w", stdout);
int t; cin >> t;
while(t--)
{
++x;
int n, k = 0; cin >> n;
rep(i, 1, n)
{
scanf("%d", &a[i]);
b[k + 1] = a[i];
k += ti(a[i], 1);
}
sort(b + 1, b + k + 1);
n = k;
rep(i, 1, n) a[i] = b[i];
rep(i, 1, n) cnt[a[i]] = cnt2[a[i]];
while(n > 1)
{
++x;
int k = 0;
b[k + 1] = 0;
k += ti(0, cnt[a[1]] - 1);
rep(i, 2, n)
{
b[k + 1] = a[i] - a[i - 1];
k += ti(a[i] - a[i - 1], 1);
b[k + 1] = 0;
k += ti(0, cnt[a[i]] - 1);
}
sort(b + 1, b + k + 1);
n = k;
rep(i, 1, n) a[i] = b[i];
rep(i, 1, n) cnt[a[i]] = cnt2[a[i]];
//rep(i, 1, n) cout << a[i] << '(' << cnt[a[i]] <<") "; cout << endl;
}
if (cnt[a[1]] > 1) printf("0\n");
else printf("%d\n", a[1]);
}
}
```
:::
bug : dùng chung mảng cnt với cnt2 là ko được