Pagini recente » Cod sursa (job #2644042) | Cod sursa (job #2437559) | Cod sursa (job #247484) | Cod sursa (job #113810) | Cod sursa (job #1005597)
#include <fstream>
#include <algorithm>
#define MAXN 2005
using namespace std;
ifstream f("psir.in");
ofstream g("psir.out");
unsigned int n,v[MAXN],sum[MAXN][MAXN],ord[MAXN],x,nxt[MAXN],prv[MAXN],sol;
bool Comp(int a,int b){
return v[a]<v[b];}
int main(){
int i,j;
f>>n;
for(i=1;i<=n;i++){
ord[i]=i;
f>>v[i];}
sort(ord+1,ord+n+1,Comp);
for(i=1;i<=n;i++){
for(j=i+1;j<=n&&v[ord[j]]==v[ord[i]];j++);
nxt[ord[i]]=ord[j-1];
for(j=i-1;j>0&&v[ord[j]]==v[ord[i]];j--);
prv[ord[i]]=ord[j];}
for(j=2;j<=n;j++){
x=v[j];
for(i=1;i<=n&&v[ord[i]]<x;i++){
sum[ord[i]][j]=sum[ord[i-1]][j];
if(ord[i]<j)
sum[ord[i]][j]+=sum[ord[n]][ord[i]]-sum[nxt[j]][ord[i]]+1;}
for(i;i<=n&&v[ord[i]]==x;i++){
sum[ord[i]][j]=sum[ord[i-1]][j];
if(ord[i]<j)
sol++;}
for(i;i<=n;i++){
sum[ord[i]][j]=sum[ord[i-1]][j];
if(ord[i]<j)
sum[ord[i]][j]+=sum[prv[j]][ord[i]]+1;}
sol+=sum[ord[n]][j];}
g<<sol<<'\n';
f.close();
g.close();
return 0;}