Cod sursa(job #1776770)

Utilizator andreicoman299Coman Andrei andreicoman299 Data 11 octombrie 2016 20:00:13
Problema Farfurii Scor 100
Compilator cpp Status done
Runda cerculdeinfo-lectia2-arborideintervale Marime 2.28 kb
#include <stdio.h>
#include <stdlib.h>
#define MAXN 30000

#define BUF_SIZE 16384
char buf[BUF_SIZE];
int pbuf=BUF_SIZE;
FILE*fi,*fo;
inline char nextch(){
    if(pbuf==BUF_SIZE){
        fread(buf, BUF_SIZE, 1, fi);
        pbuf=0;
    }
    return buf[pbuf++];
}
inline long long nextnum(){
    long long a=0;
    char c=nextch();
    while((c<'0' || c>'9') && c!='-')
        c=nextch();
    int semn=1;
    if(c=='-'){
        semn=-1;
        c=nextch();
    }
    while('0'<=c && c<='9'){
        a=a*10+c-'0';
        c=nextch();
    }
    return a*semn;
}

int v[MAXN+1], w[MAXN+1];
int FraxinusPennsylvanicaVarSubintegerrima[4*MAXN];///pentru persoanele curioase, care nu ar trebui sa imi citeasca sursa, aista ii nume de pom, sau cum le place unora sa zica, arbore de intervale

int poz, val;
void update(int p, int st, int dr){
    if(st==dr)
        FraxinusPennsylvanicaVarSubintegerrima[p]=val;
    else{
        int m=(st+dr)/2;
        if(poz<=m)
            update(2*p, st, m);
        else
            update(2*p+1, m+1, dr);
        FraxinusPennsylvanicaVarSubintegerrima[p]=FraxinusPennsylvanicaVarSubintegerrima[2*p]+FraxinusPennsylvanicaVarSubintegerrima[2*p+1];
    }
}

int rez;
void query(int p, int st, int dr, int sum){
    if(st==dr)
        rez=st;
    else{
        if(sum+FraxinusPennsylvanicaVarSubintegerrima[2*p]<val){
            sum+=FraxinusPennsylvanicaVarSubintegerrima[2*p];
            query(2*p+1, (st+dr)/2+1, dr, sum);
        }
        else
            query(2*p, st, (st+dr)/2, sum);
    }
}

int main(){
    fi=fopen("farfurii.in","r");
    fo=fopen("farfurii.out","w");
    long long n=nextnum(), k=nextnum();
    long long x=1;
    while(x*(x-1)/2<=k)
        x++;
    x--;
    long long dif=k-x*(x-1)/2;
    if(!dif){
        for(int i=1;i+x<=n;i++)
            fprintf(fo,"%d ", i);
        for(int i=n;i>n-x;i--)
            fprintf(fo,"%d ", i);
    }
    else{
        int i, j;
        for(i=1;i+x+1<=n;i++)
            fprintf(fo,"%d ", i);
        fprintf(fo,"%d ", i+dif);
        for(j=n;j>i+dif;j--)
            fprintf(fo,"%d ", j);
        j--;
        while(j>=i){
            fprintf(fo,"%d ", j);
            j--;
        }
    }
    fclose(fi);
    fclose(fo);
    return 0;
}