Cod sursa(job #1549746)

Utilizator codi22FMI Condrea Florin codi22 Data 12 decembrie 2015 18:38:09
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.69 kb
#include <iostream>
#include <cstdio>
using namespace std;
float A[15001][1500],val,s;
long long int i,j,k,n,m,p,poz,t,VreauSpatiu;
int main()
{
    freopen("datorii.in","r",stdin);
    freopen("datorii.out","w",stdout);
    scanf("%lli %lli",&n,&m);
    for (i=0;i<n;i++)
    {
        scanf("%f",&A[0][i]);
       // cout<<A[0][i]<<" ";
    }
    k=n/2;
    for (i=1;(1<<i)<n;i++)
    {
        for (j=0;j<k;j++)
        {
            A[i][j]=A[i-1][j*2]+A[i-1][j*2+1];
        }
        k>>=1;
    }
 /*  for (i=0;i<n;i++)
        {
            for (j=0;j<n;j++)
            {
                cout<<A[i][j]<<" ";
            }
            cout<<'\n';
        }
         cout<<'\n';
*/
    for (i=1;i<=m;i++)
    {
        scanf("%lli %lli %f",&p,&poz,&val);
        poz--;
        if (p==0)
        {
            j=0;
            while (A[j][poz])
            {
                A[j][poz]-=val;
                j++;
                poz>>=1;
            }
        }
        else
        {
            if (VreauSpatiu==1) cout<<'\n';
            VreauSpatiu=1;
            s=0;
            val--;
            while (poz<=val)
            {

                j=0;
                t=poz;
                while ((t+(1<<(j+1)))<val&&(t%2==0))
                {
                    j++;
                    t>>=1;
                }
                s+=A[j][t];
                poz+=(1<<j);
              //  cout<<s<<" "<<poz<<" ";
            }
            printf("%f",s);
        }
    }
 /*   for (i=0;i<n;i++)
        {
            for (j=0;j<n;j++)
            {
                cout<<A[i][j]<<" ";
            }
            cout<<'\n';
        }
*/

}