Pagini recente » Cod sursa (job #1434077) | Cod sursa (job #3040466) | Cod sursa (job #1657113) | Cod sursa (job #2057900) | Cod sursa (job #3224043)
#include <bits/stdc++.h>
#define int long long
using namespace std;
ifstream fin("psir.in");
ofstream fout("psir.out");
const int mod = (1ll << 32) - 1;
const int nmax = 2005;
int v[nmax],d[nmax];
int n;
int aib[nmax];
void update(int p, int val)
{
if(p == 0) return;
while(p < nmax)
{
aib[p] += val;
aib[p] &= mod;
p += p & (-p);
}
}
int query(int p)
{
int ret = 0;
while(p > 0)
{
ret += aib[p];
ret &= mod;
p -= p & (-p);
}
return ret;
}
inline void citire()
{
fin>>n;
int cnt=1;
map<int,int> norm;
for(int i=1; i<=n; i++)
{
fin>>v[i];
norm[v[i]] = 1;
}
for(auto [i,j] : norm)
{
norm[i] = cnt++;
}
for(int i=1; i<=n; i++)
{
v[i] = norm[v[i]];
//cout<<v[i]<<" ";
}
}
signed main()
{
citire();
for(int i=2; i<=n; i++)
{
d[i] = i-1;
d[i] &= mod;
memset(aib,0,sizeof aib);
cout<<"deleted\n";
cout<<v[i]<<":\n";
for(int j=2; j<i; j++)
{
//d[i] ++;
cout<<v[j]<<"-> ";
if(v[j] > v[i])
{
cout<<query(v[i] - 1)<<" ";
d[i] += query(v[i] - 1);
}
else if(v[j] < v[i])
{
cout<<query(nmax - 1)<<" - "<<query(v[i])<<" ";
d[i] += query(nmax - 1) - query(v[i]);
}
cout<<"\n";
update(v[j],d[j] + 1);
cout<<"updated: "<<v[j]<<" "<<d[j] + 1<<"\n";
d[i] &= mod;
}
}
int total = 0;
for(int i=1; i<=n; i++)
{
cout<<d[i]<<" ";
total += d[i];
total &= mod;
}
fout<<total;
return 0;
}