Cod sursa(job #115772)

Utilizator georgelRector George georgel Data 16 decembrie 2007 22:21:46
Problema Operatii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.65 kb
#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=0,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);
                     i = j;
                     break;
             }
     }
     a[y] = aux;
     return p-min(x,y,a);
}     
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;
}