Cod sursa(job #2477954)

Utilizator FunnyStockyMihnea Andreescu FunnyStocky Data 21 octombrie 2019 13:22:11
Problema Pedefe Scor 0
Compilator cpp-64 Status done
Runda Lista lui wefgef Marime 2.17 kb
#include <iostream>
#include <cstdio>

using namespace std;

typedef long long ll;

const int MOD = 666013;

int add(int a, int b) {
        a += b;
        if (a >= MOD)
                a -= MOD;
        if (a < 0)
                a += MOD;
        return a;
}

int mul(int a, int b) {
        return a * (ll) b % MOD;
}


const int N = 500 + 7;
const int P = 100 + 7;

int n, m, p, a[N], b[N], c[P];
int fen[N][N], nn, mm, dp[N][N];
int ua[N][N], ub[N][N];

void add(int x, int y, int a) {
        x += 3;
        y += 3;
        for (int i = x; i <= nn; i += i & (-i))
                for (int j = y; j <= mm; j += j & (-j))
                        fen[i][j] = add(fen[i][j], a);
}

int get(int x, int y) {
        x += 3;
        y += 3;
        int r = 0;
        for (int i = x; i; i -= i & (-i))
                for (int j = y; j; j -= j & (-j))
                        r = add(r, fen[i][j]);
        return r;
}

void clr() {
        for (int i = 1; i <= nn; i++)
                for (int j = 1; j <= mm; j++)
                        fen[i][j] = 0;
}

int main() {
        freopen ("pedefe.in", "r", stdin);
        freopen ("pedefe.out", "w", stdout);

        cin >> n >> m >> p;
        nn = n + 6;
        mm = m + 6;

        for (int i = 1; i <= n; i++)
                cin >> a[i];
        for (int i = 1; i <= m; i++)
                cin >> b[i];
        for (int i = 1; i <= p; i++)
                cin >> c[i];

        for (int x = 0; x < N; x++) {
                ua[n + 1][x] = n + 1;
                ub[m + 1][x] = m + 1;
        }
        for (int i = n; i >= 1; i--) {
                for (int x = 1; x < N; x++)
                        ua[i][x] = ua[i + 1][x];
                ua[i][a[i]] = i;
        }

        for (int i = m; i >= 1; i--) {
                for (int x = 0; x < N; x++)
                        ub[i][x] = ub[i + 1][x];
                ub[i][b[i]] = i;
        }

        dp[0][0] = 1;
        c[p + 1] = N;

        for (int i = 1; i < p; i++)
                if (c[i] > c[i + 1]) {
                        cout << "0\n";
                        return 0;
                }


}