Cod sursa(job #2503934)

Utilizator RadianElevenAdrian Ariotn RadianEleven Data 3 decembrie 2019 22:47:36
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f ("datorii.in");
ofstream g ("datorii.out");
int n, q;
int vek[15005];
int logs[100000];
int aint[100][5011];
void addaint(int poz, int a)
{
    aint[0][poz]=a;
    int i=0;
    while(i<=logs[2*n-1])
    {
        i++;
        aint[i][(poz+1)/2]+=a;
        poz=(poz+1)/2;
    }
}
void subs(int v, int z)
{
    int i=0;
    int poz=z;
    while(i<=logs[2*n-1])
    {

        aint[i][poz]-=v;
        poz=(poz+1)/2;
         i++;
    }
}

int query(int poz)
{

    int h=0,s=aint[0][poz],r=logs[2*n-1];
	while(h<=r)
	{
		if(poz%2==0) s+=aint[h][poz-1];
		poz=(poz+1)/2;
		h++;
	}
	return s;

}
int main()
{
    f>>n>>q;
    for(int i=1;i<=100001;++i)
    {
        logs[i]=logs[i/2]+1;
    }
    cout<<"j";
    for(int i=1;i<=n;++i)
    {
        f>>vek[i];
        addaint(i, vek[i]);
         cout<<"j";
    }

    for(int i=1;i<=q;++i)
    {
        cout<<"k";
        int t;
        f>>t;
        if(t==0)
        {
            int z, v;
            f>>z>>v;
            subs(v,z);

        }
        else {
            int p,q;
            f>>p>>q;
            int s=0;
            cout<<query(q)<<" "<<query(p-1);
            s=query(q)-query(p-1);
            g<<s<<"\n";
        }
    }
    return 0;
}