Rispetta i versi - execution timed out

Qualcuno mi sa consigliare come migliorare l’algoritmo?
faccio 90/100, l’ultimo testcase da errore Execution timed out.

Grazie.

#include<stdio.h>
#include<stdlib.h>

int n;
char versi[100000];
int valori[100001];

void scambia(int n, int m)
{
    int temp=valori[n];
    valori[n]=valori[m];
    valori[m]=temp;
}

int vero(int a, int b)
{
    if(versi[a]=='>')
        if(valori[a]>valori[b])
            return 1;
        else
            return 0;
    else
        if(valori[a]<valori[b])
            return 1;
        else
            return 0;
}

main()
{
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    
    scanf("%d", &n);
    int i;
    scanf("%c",&versi[0]);
    for(i=0; i<n-1; i++)
        scanf("%c", &versi[i]);
    
    if(versi[0]=='>')
        for(i=0; i<n; i++)
            valori[i]=n-i-1;
    else
        for(i=0; i<n; i++)
            valori[i]=i;

genera: i=0;
        while(i+1<n && vero(i, i+1))
            i++;
        if(i+1<n)
        {
            scambia(i, i+1);
            goto genera;
        }
    for(i=0; i<n-1; i++)
    {
        printf("%d ",valori[i]+1);
    }
    printf("%d", valori[n-1]+1);
}
1 Mi Piace

Il trucco sta nel inserirli già nell’ ordine corretto.

2 Mi Piace