Cod sursa(job #1709454)

Utilizator TeamFIIEUAIC ASD TeamFIIE Data 28 mai 2016 12:22:53
Problema Twoton Scor 0
Compilator cpp Status done
Runda ONIS 2016 - Runda - 2 - ACM ICPC Romanian Programming Contest Marime 2.14 kb
#include <iostream>
#include <fstream>
#include <cmath>
#include <stdio.h>
using namespace std;
int n;
int a[1000024],v[1000024],wtf[1000024];
int main()
{
  FILE *fin = fopen("twoton.in", "r");
  FILE *fout = fopen("twoton.out", "w");
  fscanf(fin, "%d", &n);
  for (int i = 0; i < n; ++i) {
    fscanf(fin, "%d", &a[i]);
  }
  v[n-1]=1;
  wtf[n-1]=a[n-1];
  for(int i=n-2;i>=0;i--)
  {
      if(a[i]<wtf[i+1])
      {
          v[i]=v[i+1]+1;
          wtf[i]=a[i];
      }
      else
      {
          v[i]=2*v[i+1]+1;
          wtf[i]=wtf[i+1];
      }
  }
  fprintf(fout, "%d\n", v[0]);
  fclose(fin);
  fclose(fout);
}
/*
unsigned long long N,T;
unsigned long long x[100000],y[100000];
unsigned long long cautbin(unsigned long long lung, unsigned long long fin,unsigned long long start)
{
    unsigned long long m,p,u,calc1,calc2;
    p=start;
    u=fin;
    while(p<=u)
    {
        m=(p+u)/2;
        calc2=m-lung;
        calc1=(m*(m+1)/2)-(calc2*(calc2+1)/2);
        if(calc1==N) return m;
        if(calc1>N)
        {
            u=m-1;
        }
        else p=m+1;
    }
    return 0;
}
int main()
{
    ifstream f("consecutive.in");
    ofstream g("consecutive.out");
    f>>T;
    unsigned long long i,lungime,rez,countt,calc,j,maximmm=0,last,first,S;
    for(i=1;i<=T;i++)
    {
        f>>N;
        first=(sqrt(1+8*N)-1)/2;
        last=N/2+1;
        countt=0;
        if(N%2==0)
        {
            lungime=3;
        }
        else
        {
            countt++;
            x[1]=N/2;
            y[1]=x[1]+1;
            lungime=3;
        }
        calc=(lungime)*(lungime+1)/2;
        while(calc<=N&&lungime<=first)
        {
            rez=cautbin(lungime,last,first);
            if(rez!=0)
            {
                countt++;
                y[countt]=rez;
                x[countt]=rez-lungime+1;
                last=rez-1;
            }
            lungime++;
            calc=(lungime)*(lungime+1)/2;
        }
        g<<countt<<'\n';
        for(j=1;j<=countt;j++)
        {
            g<<x[j]<<" "<<y[j]<<'\n';
        }
    }
    return 0;
}
*/