Cod sursa(job #2193340)

Utilizator MoldovanAndrei1Moldovan Andrei MoldovanAndrei1 Data 9 aprilie 2018 19:47:13
Problema Order Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.76 kb
#include <cstdio>
using namespace std;
int aib[120005],v[40005],n;
void update(int poz,int val)
{
    for(;poz<=n;poz+=poz&-poz)
        aib[poz]+=val;
}
int query(int poz)
{
    int s=0;
    for(;poz>0;poz-=poz&-poz)
        s+=aib[poz];
    return s;
}
int main()
{
    freopen("order.in","r",stdin);
    freopen("order.out","w",stdout);
    scanf("%d",&n);
    int poz=1,poz1=0,i;
    for(i=1;i<=n;i++)
    {
        poz+=i;
        if(poz<n)
        {
            int s1=query(poz),s2=query(poz1);
            while(s1!=s2)
            {
                poz1=poz;
                poz+=s1-s2;
                if(poz<=n)
                {
                    s1=query(poz);
                    s2=query(poz1);
                    continue;
                }
                else
                {
                    s1=query(poz-n)+i-1;
                    s2=query(poz1);
                    poz-=n;
                    continue;
                }
            }
            printf("%d ",poz);
            poz1=poz;
            update(poz,1);
            continue;
        }

                int s1=query(poz-n)+i-1,s2=query(poz1);
                poz-=n;
            while(s1!=s2)
            {
                poz1=poz;
                poz+=s1-s2;
                if(poz<=n)
                {
                    s1=query(poz);
                    s2=query(poz1);
                    continue;
                }
                else
                {
                    s1=query(poz-n)+i-1;
                    s2=query(poz1);
                    poz-=n;
                    continue;
                }
            }
            printf("%d ",poz);
            poz1=poz;
            update(poz,1);
    }
    return 0;
}