Pagini recente » Cod sursa (job #2334000) | Cod sursa (job #2352100) | Cod sursa (job #315519) | Cod sursa (job #2325255) | Cod sursa (job #1401439)
#include <stdio.h>
#include <stdlib.h>
int t[100001],s[100001],v[100001],z[100001],f[100001];
int radacina(int x)
{
if(t[x]==0)
return x;
t[x]=radacina(t[x]);
return t[x];
}
int gasire(int x)
{
int rx=radacina(x);
return s[rx];
}
int unificare(int x,int y)
{
int rx=radacina(x);
int ry=radacina(y);
t[rx]=ry;
s[ry]+=s[rx];
}
int main()
{
int n,k,i,x;
char c;
FILE *fin=fopen("ruine.in","r");
FILE *fout=fopen("ruine.out","w");
fscanf(fin,"%d%d",&n,&k);
for(i=1; i<=n; i++)
fscanf(fin,"%d",&s[i]);
fgetc(fin);
for(i=1; i<=k; i++)
{
c=fgetc(fin);
fgetc(fin);
fscanf(fin,"%d",&x);
fgetc(fin);
v[i]=x;
if(c=='T')
z[i]=1;
else{
z[i]=2;
f[v[i]]=1;
}
}
for(i=1; i<n; i++)
if(f[i]==0)
unificare(i,i+1);
for(i=k; i>0; i--)
{
if(z[i]==1)
fprintf(fout,"%d\n",gasire(v[i]));
else
unificare(v[i],v[i+1]);
}
fclose(fin);
fclose(fout);
return 0;
}