#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define initial first
#define added second
#define sort_all(v) sort(v.begin(), v.end())
#define EGRY \
ios_base::sync_with_stdio(false); \
cin.tie(NULL);
const int MAX = 6400000;
const int MOD = 998244353;
const ll OO = LLONG_MAX;
const double EPS = (double)1e-9;
const int N = 6e3 + 10;
struct SparseTable
{
int n, log_table[N];
pair<int, int> sparse_table[N][15];
void build(const vector<int> &heights)
{
n = heights.size();
for (int i = 0; i < n; ++i)
{
sparse_table[i][0] = {heights[i], i};
}
for (int i = 2; i < N; ++i)
{
log_table[i] = log_table[i / 2] + 1;
}
for (int size = 1; size <= log_table[n]; ++size)
{
for (int i = 0; i + (1 << size) <= n; ++i)
{
sparse_table[i][size] = min(sparse_table[i][size - 1], sparse_table[i + (1 << (size - 1))][size - 1]);
}
}
}
pair<int, int> query(int left, int right)
{
int length = right - left + 1;
int log_value = log_table[length];
return min(sparse_table[left][log_value], sparse_table[right - (1 << log_value) + 1][log_value]);
}
};
int min_brush_strokes(SparseTable &st, int left, int right, int base, const vector<int> &heights)
{
if (left > right)
{
return 0;
}
auto [min_value, min_index] = st.query(left, right);
int left_strokes = min_brush_strokes(st, left, min_index - 1, min_value, heights);
int right_strokes = min_brush_strokes(st, min_index + 1, right, min_value, heights);
int strokes_from_current_min = left_strokes + right_strokes + (min_value - base);
return min(strokes_from_current_min, right - left + 1);
}
void solve()
{
int n;
cin >> n;
vector<int> heights(n);
for (int i = 0; i < n; ++i)
{
cin >> heights[i];
}
SparseTable st;
st.build(heights);
cout << min_brush_strokes(st, 0, n - 1, 0, heights);
}
int main()
{
EGRY int t = 1;
cin >> t;
while (t--)
{
solve();
cout << endl;
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSB1bGwgdW5zaWduZWQgbG9uZyBsb25nCiNkZWZpbmUgaW5pdGlhbCBmaXJzdAojZGVmaW5lIGFkZGVkIHNlY29uZAojZGVmaW5lIHNvcnRfYWxsKHYpIHNvcnQodi5iZWdpbigpLCB2LmVuZCgpKQoKI2RlZmluZSBFR1JZICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgXAogICAgY2luLnRpZShOVUxMKTsKCmNvbnN0IGludCBNQVggPSA2NDAwMDAwOwpjb25zdCBpbnQgTU9EID0gOTk4MjQ0MzUzOwpjb25zdCBsbCBPTyA9IExMT05HX01BWDsKY29uc3QgZG91YmxlIEVQUyA9IChkb3VibGUpMWUtOTsKCmNvbnN0IGludCBOID0gNmUzICsgMTA7CgpzdHJ1Y3QgU3BhcnNlVGFibGUKewogICAgaW50IG4sIGxvZ190YWJsZVtOXTsKICAgIHBhaXI8aW50LCBpbnQ+IHNwYXJzZV90YWJsZVtOXVsxNV07CgogICAgdm9pZCBidWlsZChjb25zdCB2ZWN0b3I8aW50PiAmaGVpZ2h0cykKICAgIHsKICAgICAgICBuID0gaGVpZ2h0cy5zaXplKCk7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpCiAgICAgICAgewogICAgICAgICAgICBzcGFyc2VfdGFibGVbaV1bMF0gPSB7aGVpZ2h0c1tpXSwgaX07CiAgICAgICAgfQoKICAgICAgICBmb3IgKGludCBpID0gMjsgaSA8IE47ICsraSkKICAgICAgICB7CiAgICAgICAgICAgIGxvZ190YWJsZVtpXSA9IGxvZ190YWJsZVtpIC8gMl0gKyAxOwogICAgICAgIH0KCiAgICAgICAgZm9yIChpbnQgc2l6ZSA9IDE7IHNpemUgPD0gbG9nX3RhYmxlW25dOyArK3NpemUpCiAgICAgICAgewogICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSArICgxIDw8IHNpemUpIDw9IG47ICsraSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgc3BhcnNlX3RhYmxlW2ldW3NpemVdID0gbWluKHNwYXJzZV90YWJsZVtpXVtzaXplIC0gMV0sIHNwYXJzZV90YWJsZVtpICsgKDEgPDwgKHNpemUgLSAxKSldW3NpemUgLSAxXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcGFpcjxpbnQsIGludD4gcXVlcnkoaW50IGxlZnQsIGludCByaWdodCkKICAgIHsKICAgICAgICBpbnQgbGVuZ3RoID0gcmlnaHQgLSBsZWZ0ICsgMTsKICAgICAgICBpbnQgbG9nX3ZhbHVlID0gbG9nX3RhYmxlW2xlbmd0aF07CiAgICAgICAgcmV0dXJuIG1pbihzcGFyc2VfdGFibGVbbGVmdF1bbG9nX3ZhbHVlXSwgc3BhcnNlX3RhYmxlW3JpZ2h0IC0gKDEgPDwgbG9nX3ZhbHVlKSArIDFdW2xvZ192YWx1ZV0pOwogICAgfQp9OwoKaW50IG1pbl9icnVzaF9zdHJva2VzKFNwYXJzZVRhYmxlICZzdCwgaW50IGxlZnQsIGludCByaWdodCwgaW50IGJhc2UsIGNvbnN0IHZlY3RvcjxpbnQ+ICZoZWlnaHRzKQp7CiAgICBpZiAobGVmdCA+IHJpZ2h0KQogICAgewogICAgICAgIHJldHVybiAwOwogICAgfQoKICAgIGF1dG8gW21pbl92YWx1ZSwgbWluX2luZGV4XSA9IHN0LnF1ZXJ5KGxlZnQsIHJpZ2h0KTsKCiAgICBpbnQgbGVmdF9zdHJva2VzID0gbWluX2JydXNoX3N0cm9rZXMoc3QsIGxlZnQsIG1pbl9pbmRleCAtIDEsIG1pbl92YWx1ZSwgaGVpZ2h0cyk7CgogICAgaW50IHJpZ2h0X3N0cm9rZXMgPSBtaW5fYnJ1c2hfc3Ryb2tlcyhzdCwgbWluX2luZGV4ICsgMSwgcmlnaHQsIG1pbl92YWx1ZSwgaGVpZ2h0cyk7CgogICAgaW50IHN0cm9rZXNfZnJvbV9jdXJyZW50X21pbiA9IGxlZnRfc3Ryb2tlcyArIHJpZ2h0X3N0cm9rZXMgKyAobWluX3ZhbHVlIC0gYmFzZSk7CgogICAgcmV0dXJuIG1pbihzdHJva2VzX2Zyb21fY3VycmVudF9taW4sIHJpZ2h0IC0gbGVmdCArIDEpOwp9Cgp2b2lkIHNvbHZlKCkKewogICAgaW50IG47CiAgICBjaW4gPj4gbjsKICAgIHZlY3RvcjxpbnQ+IGhlaWdodHMobik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkKICAgIHsKICAgICAgICBjaW4gPj4gaGVpZ2h0c1tpXTsKICAgIH0KCiAgICBTcGFyc2VUYWJsZSBzdDsKICAgIHN0LmJ1aWxkKGhlaWdodHMpOwoKICAgIGNvdXQgPDwgbWluX2JydXNoX3N0cm9rZXMoc3QsIDAsIG4gLSAxLCAwLCBoZWlnaHRzKTsKfQoKaW50IG1haW4oKQp7CiAgICBFR1JZIGludCB0ID0gMTsKICAgIGNpbiA+PiB0OwogICAgd2hpbGUgKHQtLSkKICAgIHsKICAgICAgICBzb2x2ZSgpOwogICAgICAgIGNvdXQgPDwgZW5kbDsKICAgIH0KICAgIHJldHVybiAwOwp9