TOPIC

Wrong Answer 60%

Destron asked 3 years ago

Não estou entendendo onde está o erro no código, tentei vários casos de teste e todos que tentei deram a resposta certa:

#include<bits/stdc++.h>
using namespace std;

struct retangulo{

    unsigned long long int alt, larg;
}typedef R;

main(){

    unsigned long long int n;
    while(scanf("%llu", &n), n!=0){
        R vet[n];
        stack<R> pilha;
        for(unsigned long long int i=0;i<n;i++){
            scanf("%llu", &vet[i].alt);
            vet[i].larg=1; 
        }
        unsigned long long int maior=0, area, aux;
        for(unsigned long long int i=0;i<n;i++){                
            if(pilha.empty()) pilha.push(vet[i]);
            else{
                if(vet[i].alt<pilha.top().alt){
                    while(1){
                        if(pilha.empty()){
                            vet[i].larg+=aux;
                            pilha.push(vet[i]);
                            break;
                        }
                        else{
                            if(pilha.top().alt>vet[i].alt){
                                area=pilha.top().alt*pilha.top().larg;
                                maior=max(area, maior);
                                aux=pilha.top().larg;
                                pilha.pop();
                                if(!pilha.empty()) pilha.top().larg+=aux;
                            }
                            if(!pilha.empty() && pilha.top().alt==vet[i].alt){
                                pilha.top().larg+=vet[i].larg;
                                break;
                            }
                            if(!pilha.empty() && pilha.top().alt<vet[i].alt){
                                pilha.push(vet[i]);
                                break;
                            }           
                        }
                    }
                }else           
                if(!pilha.empty() && vet[i].alt>pilha.top().alt){
                    pilha.push(vet[i]);
                }else
                if(!pilha.empty() && vet[i].alt==pilha.top().alt){
                    pilha.top().larg++;
                }

            }
        }
        while(!pilha.empty()){
            area=pilha.top().alt*pilha.top().larg;
            aux=pilha.top().larg;

            maior=max(area, maior);

            pilha.pop();
            if(!pilha.empty()) pilha.top().larg+=aux;
        }
        printf("%llu\n", maior);
    }
}

This topic has not been answered yet. Be the first!

Remember not post solutions. Your post may be reviewed by our moderators.