Runtime error, c ++, I do not know why // this is the problem (https://www.urionlinejudge.com.br/judge/pt/problems/view/2857)

-4
#include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;

#define MAXN 100100

//int vet[MAXN];
int N;

void atualiza(int x, int v,int[],int);
int soma(int x,int [],int);

int main()
{
    int n, m, x,y,a,b,c,d;
    int acum=0;
    int tam;


    cin>>n>>m;
    int vet[n];
    N=n;

    tam=sizeof(vet);
    //cout<<"!"<<tam<<endl;

    memset(vet, 0, sizeof(vet));


    for(int i=0;i<m;i++)
    {

        cin>>n;


        if(n==1)
        {
            cin>>x>>y;

            atualiza(x,y,vet,N);

        }
        else
        {
            cin>>a>>b>>c>>d;

            if(b==c and a<c)
            {
                d=soma(d,vet,N);
                a=soma(a-1,vet,N);

                cout<<d-a<<endl;
                acum=0;
            }
            else if(b>c and a<c)
            {
                a=soma(a-1,vet,N);
                b=soma(c-1,vet,N);

                acum+=b-a;

                c=soma(b-1,vet,N);
                d=soma(d,vet,N);

                acum+=d-c;



                cout<<acum<<endl;
                acum=0;

            }
            else if(b>c and a>c)
            {
                if(b>a)
                {

                    a=soma(a,vet,N);
                    c=soma(c-1,vet,N);

                    acum+=a-c;

                    b=soma(b-1,vet,N);
                    d=soma(d,vet,N);

                    acum+=d-b;



                    cout<<acum<<endl;
                    acum=0;
                }

            }
            else if((b>c and a>c))
            {
                if(b==a)
                {
                    a=soma(a-1,vet,N);
                    c=soma(c-1,vet,N);

                    acum+=a-c;

                    b=soma(b-1,vet,N);
                    d=soma(d,vet,N);

                    acum+=d-b;



                    cout<<acum<<endl;
                    acum=0;
                }
            }
            else if((b>c and a==c))
            {

                if(a<=d and b<=d)
                {

                    d=soma(d,vet,N);
                    c=soma(c-1,vet,N);
                    acum=d-c;

                    cout<<acum<<endl;
                    acum=0;
                }   
            }
            else if(b<c and a<c)
            {
                a=soma(a-1,vet,N);
                b=soma(b,vet,N);

                acum+=b-a;

                c=soma(c-1,vet,N);
                d=soma(d,vet,N);

                acum+=d-c;

                cout<<acum<<endl;
                acum=0;

            }
            else if(a==b and c==d)
            {
                if(b<c)
                {


                    acum+=vet[a];
                    acum-=vet[a-1];
                    acum+=vet[c];
                    acum-=vet[c-1];

                    cout<<acum<<endl;
                    acum=0;

                }


            }
            else if((a==b and c==d) )
            {
                if(a==c)
                {

                    acum+=vet[a];
                    acum-=vet[a-1];



                    cout<<acum<<endl;
                    acum=0;
                }


            }

            else{

                c=soma(c-1,vet,N);
                b=soma(b,vet,N);
                acum=b-c;

                cout<<acum<<endl;
                acum=0;


            }


        }

    }


    return 0;
}
void atualiza(int x, int v, int vet[],int N){

    while(x <= N){ // nosso teto, que é quando vamos parar de rodar o algoritmo
        vet[x] += v; // adicionamos v frutas a arvore[x], como devemos
        x += (x & -x);  // atualizamos o valor de x adicionado ele ao seu bit menos significante
    }

}
int soma(int x,int vet[],int N){

    int s = 0;

    if(x<0)
        x++;

    while(x > 0){ // vamos reduzindo x até acabarmos (quando chegamos a zero)
        s += vet[x]; // adicionamos o pedaço de árvore atual à soma
        x -= (x & -x);  // removemos o bit menos significante
    }

    return s;
}
    
asked by anonymous 26.08.2018 / 14:42

1 answer

0

The size of a vector must be a constant, you can allocate the vector dynamically by doing:

int *n;
cin >> tam;
n = new int[tam];

There is also no need to use memset because the vector will be filled with 0.

    
27.08.2018 / 02:02