Cod sursa(job #245563)

Utilizator SheepBOYFelix Liviu SheepBOY Data 18 ianuarie 2009 12:08:28
Problema Operatii Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
    #include<stdio.h>  
	int v[1000000];
	int rq(int p,int q)
	{
		int returned=0,i,change,e=0;
		do
		{
			change=0;
			for(i=p;i<=q;++i)
			{
				if(v[i]-1>=0)
				{
					--v[i];
					change=1;
					e=0;
					if(!v[i]&&i==p)
						{++p;e=1;}
					if(!v[i]&&i==q)
						{--q;e=1;}
				}
				if(!v[i])
				{
					change=1;
					if(!e)
					{
						returned+=rq(p,i-1)+rq(i+1,q)-1;
						p=q+1;
						break;
					}
				}
			}
			if(change)
				returned++;
		}
		while(p<=q);
			return returned;
	}
    int main()  
    {  
		long long sum=0;
        int n,max,entr=0,p,q;  
        freopen("operatii.in","r",stdin);  
        freopen("operatii.out","w",stdout);  
        scanf("%d",&n);  
      int put=1;  
       for(int i=0;i<n;++i)  
	   {
			scanf("%d",v+i);
			entr=0;
			if(v[i])
				p=i;
			while(v[i]&&i!=n)
			{
				if(!entr)
				entr=1;
				++i;
				scanf("%d",v+i);
			}
			if(entr)
			{
				q=i-1;
				sum+=rq(p,q);
			}
	   }
     printf("%d",sum);  
     return 0;  
 }