Cod sursa(job #2390989)

Utilizator alexge50alexX AleX alexge50 Data 28 martie 2019 16:28:52
Problema Schi Scor 100
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
/*
 * NVIDIA, Fuck you!
 *      - Linux Torvalds
 */

#include <stdio.h>

#pragma GCC optimize ("-O3,-ffast-math")
#pragma GCC target("sse3")

#define o3 __attribute__((optimize("-O3")))
#define always_inline __inline__ __attribute__((always_inline))

#define fast_shit o3 always_inline

#define MAX_N 30000

int v[MAX_N];
int r[MAX_N + 1];

struct {
    int data[MAX_N + 1];
    int n;
}aib;

int query(int i)
{
    int sum = 0;

    while(i != 0)
    {
        sum += aib.data[i];
        i -= i & (-i);
    }

    return sum;
}

fast_shit  void increment(int i)
{
    while(i <= aib.n)
    {
        aib.data[i] ++;
        i += i & (-i);
    }
}


int main()
{
    FILE *fin, *fout;
    int n;

    fin = fopen("schi.in", "r");

    fscanf(fin, "%d", &n);
    aib.n = n;
    for(int i = 0; i < n; i++)
        fscanf(fin, "%d", &v[i]);
    fclose(fin);


    for(int i = n - 1; i >= 0; i--)
    {
        int x;
        int last_x = 0;

        while((x = query(v[i])) != last_x)
            v[i] += (x - last_x), last_x = x;

        r[v[i]] = i + 1;
        increment(v[i]);
    }

    fout = fopen("schi.out", "w");

    for(int i = 1; i <= n; i ++)
        fprintf(fout, "%d\n", r[i]);

    fclose(fout);

}