Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stdio.h>
- #include <vector>
- #include <string>
- #include <algorithm>
- using namespace std;
- vector<int> arreglo(1000001),arbol(2000002);
- void constructor(int nodo,int izq,int der)
- {
- if(izq==der)
- {
- arbol[nodo]=arreglo[izq];
- return;
- }
- int mitad=(izq+der)/2;
- constructor(2*nodo,izq,mitad);
- constructor(2*nodo+1,mitad+1,der);
- arbol[nodo]=arbol[2*nodo]+arbol[2*nodo+1];
- }
- int consulta(int nodo,int izq, int der,int start,int end)
- {
- if(end<izq || start>der)//caso fuera de intervalo
- return 0;
- if(izq>=start && der<=end)//caso dentro del intervalo
- return arbol[nodo];
- //cout<<"paso"<<endl;
- //int respuesta_izq=consulta(2*nodo,izq,(izq+der)/2,start,end);
- //int respuesta_der=consulta(2*nodo+1,(izq+der)/2+1,der,start,end);
- return consulta(2*nodo,izq,(izq+der)/2,start,end)+consulta(2*nodo+1,(izq+der)/2+1,der,start,end);
- }
- void update(int nodo,int izq,int der,int pos)
- {
- if(pos<izq || pos>der)
- return;
- if(izq==der)
- return;
- int mitad=(izq+der)/2;
- update(2*nodo,izq,mitad,pos);
- update(2*nodo+1,mitad+1,der,pos);
- if(arreglo[arbol[2*nodo]]<=arreglo[arbol[2*nodo+1]])
- arbol[nodo]=arbol[2*nodo];
- else
- arbol[nodo]=arbol[2*nodo+1];
- }
- int main(int argc, char const *argv[])
- {
- int N;
- scanf("%d",&N);
- for (int i = 0; i < N; ++i)
- {
- scanf("%d",&arreglo[i]);
- //cout<<arreglo[i]<<endl;
- }
- constructor(1,0,N-1);
- long long int contador=0;
- for (int i = 0; i < N-1; ++i)
- {
- for (int j = i+1; j < N; ++j)
- {
- //cout<<"i:"<<i<<" j:"<<j<<endl;
- //cout<<consulta(1,0,N-1,i,j)<<endl;
- if(consulta(1,0,N-1,i,j)==0)
- contador++;
- }
- }
- printf("%Ld\n", contador);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement