Pagini recente » Cod sursa (job #620722) | Cod sursa (job #1927041) | Cod sursa (job #1111278) | Cod sursa (job #1971661) | Cod sursa (job #2042821)
#include<fstream>
#include<algorithm>
#define mod (1LL << 32)
using namespace std;
unsigned int n, i, j, nr, sol;
unsigned int v[2005], w[2005], d[2005][2005];
ifstream fin("psir.in");
ofstream fout("psir.out");
int main(){
fin>> n;
for(i = 1; i <= n; i++){
fin>> v[i];
w[i] = v[i];
}
sort(w + 1, w + n + 1);
nr = 1;
for(i = 2; i <= n; i++){
if(w[i] != w[nr]){
w[++nr] = w[i];
}
}
for(i = 1; i <= n; i++){
for(j = 1; j <= nr; j++){
if(v[i] == w[j]){
v[i] = j;
}
}
}
for(i = 2; i <= n; i++){
for(j = i - 1; j >= 1; j--){
if(v[i] == v[j]){
d[i][ v[j] ] = (1LL + d[i][ v[j] ]) & (mod - 1);
}
else{
if(v[i] < v[j]){
d[i][ v[j] ] = (1LL + d[i][ v[j] ] + d[j][ v[i] - 1]) & (mod - 1);
}
else{
d[i][ v[j] ] = (1LL + mod + d[i][ v[j] ] + d[j][nr] - d[j][ v[i] ]) & (mod - 1);
}
}
}
for(j = 1; j <= nr; j++){
sol = (sol * 1LL + d[i][j]) & (mod - 1);
d[i][j] = (d[i][j] * 1LL + d[i][j - 1]) & (mod - 1);
}
}
fout<< sol <<"\n";
return 0;
}