Cod sursa(job #1755461)

Utilizator RazorBestPricop Razvan Marius RazorBest Data 10 septembrie 2016 11:54:35
Problema Arbori indexati binar Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.53 kb
#include <cstdio>
using namespace std;

FILE *f = freopen("aib.in", "r", stdin), *g = freopen("aib.out", "w", stdout);

int n, m, v[100001];

void start()
{
    int op, a, b;
    scanf("%d%d", &n, &m);
    for(int i = 1; i <= n; ++i)
        {
            scanf("%d", &v[i]);
            v[i] += v[i - 1];
        }

    while(m)
        {
            scanf("%d", &op);
            if(op == 0)
                {
                    scanf("%d %d", &a, &b);

                    for(int i = a; i <= n; ++i)
                        v[i] += b;
                }
            else if(op == 1)
                {
                    scanf("%d %d", &a, &b);

                    printf("%d\n", v[b] - v[a - 1]);
                }
            else
                {
                    scanf("%d", &a);

                    int j = 1, k = n, med;
                    while(j <= k)
                        {
                            med = (j + k) / 2;
                            if(a == v[med]) break;
                            else if(a > v[med])
                                {
                                    j = med + 1;
                                }
                            else
                                {
                                    k = med - 1;
                                }
                        }
                    if(j <= k) printf("%d\n", med);
                    else printf("-1\n");
                }
            m--;
        }
}

int main()
{
    start();
}