Cod sursa(job #463307)

Utilizator nashnash mit nash Data 14 iunie 2010 22:40:04
Problema Arbori indexati binar Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
/* 
 * File:   main.cpp
 * Author: [email protected]
 *
 * Created on June 14, 2010, 6:07 PM
 */

#include <stdlib.h>
#include <cstdio>

/*
 * 
 */

int aib[10001],nr,n,m;

#define ZERO(i) ()

void update(int p , int nr) {

    for(int i = p ; i <= n ; i += ZERO(i) )
        aib[i] = nr;
}

int query(int p) {
    int sum = 0;
    for( int i = p ; i >= 0 ; i -= ZERO(i) )
        sum += aib[i];
}

int search(int s,int d,int nr) {
    if(s > d) return -1;
    int mij = ( i + j) / 2;
    int s = query(mij);

    if( s == nr )
        return MAX( search(i,mij-1) , mij );

    if(nr < s)
        return search(i,mij-1);
    else
        return search(mij+1,j);
}

int main(int argc, char** argv) {

    freopen("aib.in","r",stdin);
    freopen("aib.out","w",stdout);

    scanf("%d %d",&n,&m);

    for(int i= 1 ; i <= n ; i++) {
        scanf("%d",&nr);
        update(i,nr);
    }

    for(int i = 1 ; i <= m ; i++) {
        int t,p1,p2;
        scanf("%d",&t);

        if(t==2)
            scanf("%d",&p1);
        else
            scanf("%d %d",&p1,&p2);


        switch (t)
                case 0 : { update(p1,p2); } break;
                case 1 : { printf("%d\n", query(p2) - query(p1-1)); } break;
                case 2 : { printf("%d\n",seach(p1)); } break;

    }

    return (EXIT_SUCCESS);
}