Pagini recente » Cod sursa (job #2516616) | Cod sursa (job #2609235) | Cod sursa (job #2045913) | Cod sursa (job #2741107) | Cod sursa (job #405286)
Cod sursa(job #405286)
# include <cstdio>
# include <queue>
# include <string.h>
# include <stdlib.h>
# include <algorithm>
using namespace std;
# define FIN "nums.in"
# define FOUT "nums.out"
# define max(a, b) (a > b ? a : b)
# define MAX_N 100005
int A[MAX_N];
char t[MAX_N], *s[MAX_N];
int N, i, j, op, cnt, len, bnd, k, c, cnz, dnt, pow;
int ct[MAX_N], *nums[MAX_N], aux[MAX_N], zero[MAX_N], zk[MAX_N];
int cmp(int A, int B)
{
if (strcmp(s[A], s[B]) < 0) return 1;
return 0;
}
void update(int pz)
{
for (int i = pz; i <= dnt; i += pz & (pz ^ (pz - 1))) ++A[i];
}
void query(int k, int pow)
{
}
int main()
{
freopen(FIN, "r", stdin);
freopen(FOUT, "w", stdout);
scanf("%d", &N);
cnt = 0; cnz = 0;
for (i = 1; i <= N; ++i)
{
scanf("%d ", &op);
if (op == 1)
{
gets(t);
++ct[len = strlen(t)];
bnd = max(bnd, len);
s[++cnt] = (char *) malloc(len + 1);
for (j = 0; j <= len; ++j) s[cnt][j] = t[j];
} else
{
scanf("%d", &zk[++cnz]);
zero[cnz] = cnt;
}
}
for (i = 1; i <= bnd; ++i) nums[i] = (int *) malloc((ct[i] + 1) * sizeof(int)), nums[i][0] = 0;
for (i = 1; i <= cnt; ++i)
{
len = strlen(s[i]);
nums[len][++nums[len][0]] = i;
}
for (i = 1; i <= bnd; ++i)
if (ct[i]) sort(nums[i] + 1, nums[i] + nums[i][0] + 1, cmp);
for (i = 1; i <= bnd; ++i)
if (ct[i])
{
aux[nums[i][1]] = ++dnt;
for (j = 2; j <= nums[i][0]; ++j)
{
for (k = 0; k < i; ++k)
if (s[nums[i][j]][k] != s[nums[i][j - 1]][k]) break;
if (k != i) aux[nums[i][j]] = ++dnt;
else aux[nums[i][j]] = dnt;
}
}
for (i = 1; i <= cnt; ++i) ct[aux[i]] = i;
c = 0;
for (pow = 1; pow << 1 <= dnt; ++pow);
for (i = 1; i <= cnz; ++i)
{
/*while (c != zero[i]) update(1, 1, dnt, aux[++c]);
printf("%s\n", s[ct[query(1, 1, dnt, zk[i])]]);*/
}
return 0;
}