Pagini recente » Cod sursa (job #124851) | Cod sursa (job #308873) | Cod sursa (job #2036616) | Cod sursa (job #2920643) | Cod sursa (job #2984828)
#include <fstream>
#include <vector>
#include <map>
using namespace std;
ifstream cin("psir.in");
ofstream cout("psir.out");
const int MAX = 2*1e3+3;
int n;
vector<int> v;
vector<vector<uint32_t>> dp;
map<int,int> norm;
void read() {
cin>>n;
v.resize(n+1);
for(int i=1;i<=n;i++) {
cin>>v[i];
norm[v[i]]=i;
}
int cnt=1;
for(auto& it:norm) {
it.second=cnt++;
}
for(int i=1;i<=n;i++) {
v[i]=norm[v[i]];
}
}
void solve() {
dp.resize(MAX+3,vector<uint32_t>(MAX+3));
uint32_t res=0;
for(int i=1;i<=n;i++) {
for(int j=1;j<i;j++) {
int cnt=1;
if(v[ i ] > v[ j ]) {
cnt += dp[j][MAX]-dp[j][v[i]];
}
else if(v[ i ] < v[ j ]){
cnt += dp[j][v[i]-1];
}
dp[i][v[j]]+=cnt;
}
for(int x=1;x<=MAX;x++) {
res+=dp[i][x];
dp[i][x]+=dp[i][x-1];
}
}
cout<<res;
}
int main() {
read();
solve();
return 0;
}