提交时间:2023-08-16 12:16:10
运行 ID: 98666
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; const int SIZE = 1e5+5; int n, m; int a[SIZE]; int op[SIZE], l[SIZE], r[SIZE], k[SIZE]; int tmp[SIZE << 1], cnt, ed; namespace o1 { int f[SIZE], tp; int main() { for (int o = 1; o <= m; ++o) { if (op[i] == 1) { for (int i = l[o]; i <= r[o]; ++i) { a[i] = k[o]; } } else { tp = 0; memset(f, 0, sizeof(f)); for (int i = l[o]; i <= r[o]; ++i) { ++f[a[i]]; if (f[a[i]] == 1) ++tp; } printf("%d\n",tp); } } return 0; } } int main() { #ifdef fio freopen("test.in","r",stdin); #endif cin >> n >> m; for (int i = 1; i <= n; ++i) { scanf("%d",a+i); tmp[++cnt] = a[i]; } bool fg1 = true; for (int i = 1; i <= m; ++i) { scanf("%d",op+i); if (op[i] == 1) { fg1 = false; scanf("%d%d%d",l+i,r+i,k+i); tmp[++cnt] = k[i]; } else { scanf("%d%d%d",l+i,r+i); } } sort(tmp + 1, tmp + 1 + cnt); ed = unique(tmp + 1, tmp + 1 + cnt) - tmp - 1; for (int i = 1; i <= n; ++i) { a[i] = lower_bound(tmp + 1, tmp + 1 + ed, a[i]) - tmp; } for (int i = 1; i <= m; ++i) { if (op[i] == 1) k[i] = lower_bound(tmp + 1, tmp + 1 + ed, k[i]); } if (n <= 5000 && m <= 5000) { return o1::main(); } else { puts("!"); } return 0; }