Pagini recente » Cod sursa (job #1738095) | Cod sursa (job #588650) | Cod sursa (job #1057832) | Cod sursa (job #2311216) | Cod sursa (job #2109956)
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
FILE *f = fopen("psir.in","r");
FILE *g = fopen("psir.out","w");
vector<int> V;
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 = 1;i <= N;i++){
P[i] = find(V.begin(),V.end(),P[i]) - V.begin();
}
for(int i = N;i;i--){
for(int j = i + 1;j <= N;j++){
int st = min(P[i],P[j]);
int dr = max(P[i],P[j]);
dp[i][j] = 1 + S[j][dr - 1] - S[j][st];
S[i][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;
}