Pagini recente » Cod sursa (job #2330800) | Cod sursa (job #1007507) | Cod sursa (job #268585) | Cod sursa (job #1534621) | Cod sursa (job #2148542)
#include <fstream>
#include<algorithm>
using namespace std;
ifstream cin ("psir.in");
ofstream cout ("psir.out");
unsigned int best[2010][2010],k,big[2010],small[2010],sol; long long t=1;
int n,date[2010];
struct bla
{
int p,v;
} data[2010];
bool sortare (bla q,bla w)
{
return q.v<w.v;
}
void read ()
{
cin>>n; for(int i=1;i<=31;i++) t*=2;
t*=2;
for(int i=1;i<=n;i++)
cin>>date[i],data[i].v=date[i],data[i].p=i;
sort(data+1,data+n+1,sortare);
for(int i=1;i<=n;i++)
{ int mic=1000000000,mare=0;
for(int j=1;j<=n;j++)
{
if(date[i]==data[j].v) mic=min(mic,j-1),mare=max(mare,j);
} small[i]=mic; big[i]=mare;
}
}
void solve ()
{
for(int i=2;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(data[j].p<i)
{ unsigned int sum=1;
if(data[j].v>date[i]) sum=(sum+best[data[j].p][small[i]])%t;
else if(data[j].v<date[i]) sum=(sum+best[data[j].p][n]-best[data[j].p][big[i]])%t;
if(sum<0) sum+=t; best[i][j]=(best[i][j-1]+sum)%t; sol=(sol+sum)%t;
} else best[i][j]=best[i][j-1];
}
}
cout<<sol;
}
int main()
{
read();
solve();
cin.close();
cout.close();
return 0;
}