Pagini recente » Cod sursa (job #595750) | Cod sursa (job #516516) | Cod sursa (job #2467818) | Cod sursa (job #2472857) | Cod sursa (job #115783)
Cod sursa(job #115783)
#include<fstream>
using namespace std;
ifstream fin("operatii.in");
ofstream fout("operatii.out");
int a[1000000];
void citire(int &n, int a[1000000])
{
int i;
fin>>n;
for(i = 1; i <= n; i++)
fin>>a[i];
}
int min(int x,int y,int a[1000000])
{
int min = 9999999,i;
for(i = x; i < y; i++)
if(a[i] < min)
min = a[i];
return min;
}
int max(int x, int y,int a[1000000])
{
int max = 0,i;
for(i = x; i <= y; i++)
if(a[i] > max)
max = a[i];
return max;
}
int numarare2(int x , int y,int a[1000000])
{
int i,p=min(x,y,a),x1,y1,j;
//fout<<min(x,y,a)<<" "<<x<<" "<<y<<"\n";
int aux;
aux = a[y];
a[y] = min(x,y,a);
for(i = x; i < y; i++)
if(a[i] != min(x,y,a))
{
x1 = i;
for(j = i; j <= y; j++)
if(a[j] == min(x,y,a))
{
y1 = j;
p+=max(x1,y1,a)-min(x,y,a);
i = j;
break;
}
}
a[y] = aux;
return p;
}
void numarare(int n,int a[1000000])
{
int i,p=0,x,y,j;
for(i = 1; i <= n+1; i++)
if(a[i] != 0)
{
x = i;
for(j = i; j <= n+1; j++)
if(a[j] == 0)
{
y = j;
p+=numarare2(x,y,a);
// fout<<numarare2(x,y,a)<<"\n";
i = j;
break;
}
}
fout<<p;
}
int main()
{
int n;
citire(n,a);
numarare(n,a);
fin.close();
fout.close();
return 0;
}