Cod sursa(job #2571730)

Utilizator RedXtreme45Catalin RedXtreme45 Data 5 martie 2020 09:48:35
Problema Diametrul unui arbore Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <fstream>
#include <queue>
#define Imax 1000011
using namespace std;
ifstream fin("jstc.in");
ofstream fout("jstc.out");
int a,b,k,S,k1,ap[Imax],v[Imax],n,X;
string s;
int stramos(int x)
{
    if (x==ap[x])
        return ap[x];
    ap[x]=stramos(ap[x]);
    return ap[x];
}
int main()
{
    fin>>a>>b;
    fin>>s;
    for (int i=1;i<Imax-1;i++)
        ap[i]=i;
    int sz=s.size()-1;
    int i=0;
    while (i<=sz)
    {
        if (s[i]=='I')
        {
            n++;
            k++;
            v[n]=k;
        }
        if (s[i]=='E'){
            int a=stramos(v[n]);
            int b=stramos(v[n-1]);
            if (a>b)
                ap[b]=a;
            else
                ap[a]=b;
            n--;
        }
        if (s[i]=='Q')
        {
            X=(1LL*a*X+b)%k+1;
            int x=stramos(X-1)+1;
            if (x<=v[n])
                S+=x;
            else
                S--;
        }
        i++;
    }
    fout<<S;
    return 0;
}