Pagini recente » Cod sursa (job #955967) | Cod sursa (job #1275708) | Cod sursa (job #1529534) | Cod sursa (job #3213295) | Cod sursa (job #2109950)
#include <cstdio>
#include <algorithm>
#include <vector>
#include <map>
using namespace std;
FILE *f = fopen("psir.in","r");
FILE *g = fopen("psir.out","w");
vector<int> V;
map<int,int> M;
int N;
int P[2005];
unsigned int dp[2005][2005];
unsigned int S[2005][2005],rez;
int main(){
fscanf(f,"%d",&N);
V.push_back(0);
for(int i = 1;i <= N;i++){
fscanf(f,"%d",&P[i]);
V.push_back(P[i]);
}
sort(V.begin(),V.end());
V.resize(unique(V.begin(),V.end()) - V.begin());
for(int i = 0;i < (int)V.size();i++){
M[V[i]] = i;
}
for(int i = N;i;i--){
for(int j = i + 1;j <= N;j++){
int st = M[min(P[i],P[j])];
int dr = M[max(P[i],P[j])];
dp[i][j] = 1 + S[j][dr - 1] - S[j][st];
S[i][M[P[j]]] += dp[i][j];
rez += dp[i][j];
}
for(int j = 1;j <= N;j++){
S[i][j] += S[i][j - 1];
}
}
fprintf(g,"%u",rez);
fclose(f);
fclose(g);
return 0;
}