Pagini recente » Cod sursa (job #2273442) | Cod sursa (job #2087089) | Cod sursa (job #384850) | Cod sursa (job #1886541) | Cod sursa (job #2981937)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream cin("psir.in");
ofstream cout("psir.out");
#define int long long
int n;
const int MOD = 4294967295;
vector<int> v;
int dp[2005][2005];
void read() {
cin>>n;
v.resize(n+1);
for(int i=1;i<=n;i++) {
cin>>v[i];
}
}
int bs_lower(int val) {
int l=1,r=n,mid,res=-1;
while(l<=r) {
mid=l+(r-l)/2;
if(v[mid]<val) {
res=mid;
l=mid+1;
}
else {
r=mid-1;
}
}
return res;
}
int bs_greater(int val) {
int l=1,r=n,mid=0,res=-1;
while(l<=r) {
mid=l+(r-l)/2;
if(v[mid]>val) {
res=mid;
r=mid-1;
}
else {
l=mid+1;
}
}
return res;
}
void solve() {
sort(v.begin()+1,v.end());
// for(int i=1;i<=n;i++) {
// cout<<v[i]<<" ";
// }
// cout<<"\n\n";
int res=((n)*(n-1))/2;
for(int i=1;i<=n;i++) {
while(i+1<=n && v[i+1]==v[i]) {
i++;
}
int lw=bs_lower(v[i]),gr=bs_greater(v[i]);
if(lw>-1 && gr>-1) {
res+=lw*(n-gr+1);
}
}
cout<<res;
}
void solve2(){
int res = 0;
for(int i=1;i<=n;i++) {
for(int j=i+1;j<=n;j++) {
dp[i][j] = 1;
if (v[j] > v[i]){
for(int k=1;k<=i;k++){
dp[i][j] += (v[k] > v[j]) * dp[k][i];
}
}
if (v[j] < v[i]){
for(int k=1;k<=i;k++){
dp[i][j] += (v[k] < v[j]) * dp[k][i];
}
}
res += dp[i][j]%MOD;
res %=MOD;
}
}
cout << res%MOD;
}
int32_t main() {
read();
solve2();
return 0;
}