Cod sursa(job #2950646)

Utilizator VladPislaruPislaru Vlad Rares VladPislaru Data 4 decembrie 2022 13:34:01
Problema Numerele lui Stirling Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <bits/stdc++.h>
using namespace std;


int BS (int possible[], int k, int val)
{
    int st = 1, dr = k, p = 0;
    while (st <= dr)
    {
        int mij = (st + dr) / 2;
        if (possible[mij] >= val)
            dr = mij - 1;
        else
        {
            p = mij;
            st = mij + 1;
        }
    }
    return p;
}

int main()
{
    ios::sync_with_stdio(false);
	cin.tie(nullptr);
    int t;
    cin >> t;
    while(t--)
    {
        int n;
        cin >> n;
        int a[n + 5];
        for(int i = 1; i <= n; i++)
            cin >> a[i];
        long long ans = 0;
        int possible[n + 5], k = 0;
        for (int i = 1; i <= n; i++)
            if (a[i] < i)
            {
                ans += 1LL * BS(possible, k, a[i]);
                possible[++k] = i;
            }
        cout << ans << "\n";
    }
    return 0;
}