#include <cstdio>
const int maxn = 100000;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
int cov[maxn << 2];
bool ok[40];
void pushdown(int rt)
{
if (cov[rt] != -1)
{
cov[rt << 1] = cov[rt << 1 | 1] = cov[rt];
cov[rt] = -1;
}
}
void build(int l, int r, int rt)
{
cov[rt] = 1;
if (r == l)
return;
int m = (l + r) >> 1;
build(lson);
build(rson);
}
void update(int L, int R, int c, int l, int r, int rt)
{
if (L <= l&&r <= R)
{
cov[rt] = c;
return;
}
pushdown(rt);
int m = (l + r) >> 1;
if (L <= m) update(L, R, c, lson);
if (R > m) update(L, R, c, rson);
}
void query(int L, int R, int l, int r, int rt)
{
if (cov[rt] != -1)
{
ok[cov[rt]] = 1;
return;
}
if (r == l)
return;
pushdown(rt);
int m = (l + r) >> 1;
if (L <= m) query(L, R, lson);
if (R > m) query(L, R, rson);
}
int main()
{
int n, m, k;
scanf("%d %d %d", &n, &m, &k);
char ch;
build(1, n, 1);
while (k--)
{
scanf("\n%c", &ch);
if (ch == 'C')
{
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
update(a, b, c, 1, n, 1);
}
else
{
for (int i = 0; i <= m; i++)
ok[i] = 0;
int a, b;
scanf("%d %d", &a, &b);
query(a, b, 1, n, 1);
int sum = 0;
for (int i = 1; i <= m; i++)
if (ok[i])
sum++;
printf("%d\n", sum);
}
}
return 0;
}
poj 2777 颜色覆盖。
最新推荐文章于 2023-06-08 11:34:04 发布