Pagini recente » Cod sursa (job #2793394) | Cod sursa (job #623889) | Cod sursa (job #2831078) | Cod sursa (job #680695) | Cod sursa (job #2975486)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("psir.in");
ofstream fout("psir.out");
unsigned int f[2001][2001];
int n, v[2001], sorted[2001];
const long long mod = pow(2, 32);
int l, r, m, pos;
int main()
{
fin >> n;
if (n > 2000)
while (true);
for (int i = 1; i <= n; i++)
fin >> sorted[i], v[i] = sorted[i];
sort(sorted + 1, sorted + n + 1);
for (int i = 1; i <= n; i++)
{
l = 1, r = n;
while (l <= r)
{
m = (l + r) >> 1;
if (sorted[m] >= v[i])
{
pos = m;
r = m - 1;
}
else
l = m + 1;
}
v[i] = pos;
}
long long x, y;
long long res = 0;
for (int i = 1; i <= n; i++)
{
fin >> v[i];
for (int j = i - 1; j >= 1; j--)
{
if (v[j] < v[i])
{
x = f[j][2000] - f[j][v[i]];
if (x < 0)
x += mod;
x++;
if (x == mod)
x = 0;
f[i][v[j]] += x;
if (f[i][v[j]] >= mod)
f[i][v[j]] -= mod;
}
else
{
x = f[j][v[i] - 1] + 1;
if (x == mod)
x = 0;
f[i][v[j]] += x;
if (f[i][v[j]] >= mod)
f[i][v[j]] -= mod;
}
}
for (int j = 1; j <= 2000; j++)
{
f[i][j] += f[i][j - 1];
if (f[i][j] >= mod)
f[i][j] -= mod;
}
res += f[i][2000];
if (res >= mod)
res -= mod;
}
fout << res;
return 0;
}