Cod sursa(job #2702750)

Utilizator NoRules123Osadici Darius Bogdan NoRules123 Data 5 februarie 2021 18:35:28
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int p2(int x)
{
    int aux=x;
    while(x%2==0)
        x/=2;
    return aux/x;
}
const int nmax=15005;
int n,m,i,j,s[nmax],aib[nmax],v[nmax];
void scade(int x,int vall)
{
    for(int poz=x;poz<=n;poz+=poz&(-poz))
        aib[poz]-=vall;

}
int suma(int x)
{
    int s=0;
    for(int poz=x;poz;poz-=poz&(-poz))
        s+=aib[poz];
    return s;
}
int main()
{
    fin>>n>>m;
    for(i=1;i<=n;i++)
        fin>>v[i];
    for(i=1;i<=n;i++)
        s[i]=s[i-1]+v[i];
    for(i=1;i<=n;i++)
    {
        int temp=i-p2(i);
        cout<<temp<<endl;
        aib[i]=s[i]-s[temp];
    }
    while(m--)
    {
        int st,dr,val;
        fin>>val>>st>>dr;
        if(val==0)
            scade(st,dr);
        else
            fout<<suma(dr)-suma(st-1)<<'\n';
        /**for(i=1;i<=n;i++)
            cout<<aib[i]<<" ";
        cout<<'\n';
        cout<<suma(dr)<<endl;
        */
    }
    return 0;
}