Pagini recente » Cod sursa (job #1409542) | Cod sursa (job #154431) | Cod sursa (job #1460358) | Cod sursa (job #1260752) | Cod sursa (job #325076)
Cod sursa(job #325076)
#include <fstream>
using namespace std;
ofstream ofis("operatii.out");
ifstream ifis("operatii.in");
typedef struct nod
{long inf; nod * urm;} * list;
list p[103545];
list q;
long n,i,maxim,v[1004325],uz[1004543];
long long cont,nrint,k;
int main()
{
ifis>>n;
for (i=1; i<=n; i++)
{ifis>>v[i]; if (v[i]>maxim) maxim=v[i];}
for (i=1; i<=n; i++)
{p[v[i]]=new nod; p[v[i]]->inf=-1; p[v[i]]->urm=NULL;}
for (i=1; i<=n; i++)
{
if (p[v[i]]->inf==-1) {p[v[i]]->inf=i; p[v[i]]->urm=NULL;}
else
{while (p[v[i]]->urm!=NULL) p[v[i]]=p[v[i]]->urm;
q=new nod;
q->inf=i;
q->urm=NULL;
p[v[i]]->urm=q;}
}
uz[-1]=1; uz[n+1]=1;
for (i=0; i<=maxim-1; i++)
{
while (p[i])
{
k=p[i]->inf;
uz[k]=1;
if (!uz[k-1] && !uz[k+1]) nrint++;
else if (uz[k-1] && uz[k+1]) nrint--;
p[i]=p[i]->urm;
}
cont+=nrint;
}
ofis<<cont;
return 0;
}