Cod sursa(job #2930212)

Utilizator sims_glAlexandru Simion sims_gl Data 27 octombrie 2022 18:52:44
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include<iostream>
#include<fstream>
using namespace std;
int i,n,m,v[15005], aint[100005], p, x, p1, p2, c;
void add(int pos, int x, int tip)
{
   while (pos > 0)
    {
        aint[pos] += tip*x;
        pos /= 2;
    }
}
int sum(int pos,int st, int dr, int x, int y)
{
    if (x > y)
        return 0;
    if(st == x && dr == y)
        return aint[pos];

    int mij = (st + dr) / 2;
    return sum(2 * pos, st, mij, x, min(mij, y))+sum(2 * pos + 1, mij + 1, dr, max(mij+1, x), y);
}
int main()
{
    freopen("datorii.in","r",stdin);
    freopen("datorii.out","w",stdout);
    scanf("%d%d", &n,&m);

   for(p=1;p<n;p=p<<1);
    for(int i=1;i<=n;i++)
    {
        scanf("%d", &v[i]);
        add(p+i-1, v[i], 1);
    }
    for(int i=1;i<=m;i++)
    {
        scanf("%d%d%d", &c, &p1, &p2);
        if(c==0)
        {
            add(p1+i-1, p2, -1);
        }
        else {
            printf("%d\n",sum(1, 1, p, p1, p2));
        }
    }
}