Pagini recente » Cod sursa (job #327109) | Cod sursa (job #537387) | Cod sursa (job #3197408) | Cod sursa (job #2628492) | Cod sursa (job #2730400)
#include <bits/stdc++.h>
#define ll long long
#define ui unsigned int
#define ld long double
using namespace std;
const ll mod = (1ll << 32);
const ll INF = 1e16;
ifstream fin ("psir.in");
ofstream fout ("psir.out");
ll n, v[2002], a[2002];
unsigned int ans;
unsigned int sum[2002][2002];
ui add (ll a, ll b) {
a += b;
if (a < 0)
a -= mod;
if (a >= mod)
a -= mod;
return a;
}
int main()
{
fin >> n;
for (int i = 1; i <= n; i++) {
fin >> v[i];
a[i] = v[i];
}
sort(a + 1, a + n + 1);
for (int i = 1; i <= n; i++)
v[i] = lower_bound(a + 1, a + n + 1, v[i]) - a;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++)
sum[i][j] = add(sum[i][j], sum[i][j - 1]);
for (int j = i + 1; j <= n; j++) {
if (v[i] == v[j]) {
ans = add(ans, 1);
continue;
}
ui lol = 0;
if (v[i] > v[j]) {
lol = add(lol, sum[i][v[j] - 1]);
}
else {
ll val = sum[i][n] - sum[i][v[j]];
if (val >= mod) val -= mod;
lol = add(lol, val);
}
lol = add(lol, 1);
sum[j][v[i]] += lol;
ans = add(ans, lol);
}
}
fout << ans << "\n";
return 0;
}