提交时间:2023-08-16 12:18:15
运行 ID: 98673
#include<bits/stdc++.h> using namespace std; const int MX = 2e5 + 5; int n, m, num, ans; int a[MX], b[MX]; int opt[MX], l[MX], r[MX], x[MX]; int vis[MX]; int main() { cin>>n>>m; num = n; for(int i=1; i<=n; i++) scanf("%d", &a[i]), b[i] = a[i]; for(int i=1; i<=m; i++) { scanf("%d%d%d", &opt[i], &l[i], &r[i]); if(opt[i]==1) scanf("%d", &x[i]); b[++num] = x[i]; } sort(b+1, b+num+1); num = unique(b+1, b+num+1)-b; for(int i=1; i<=n; i++) a[i] = lower_bound(b+1, b+num+1, a[i])-b; for(int i=1; i<=m; i++) { ans = 0; memset(vis, 0, sizeof(vis)); if(opt[i] == 1) { x[i] = lower_bound(b+1, b+num+1, x[i])-b; for(int j=l[i]; j<=r[i]; j++) a[j] = x[i]; } else { for(int j=l[i]; j<=r[i]; j++) vis[a[j]] ++; for(int j=1; j<=num; j++) if(vis[j]) ans ++; printf("%d\n", ans); } } return 0; }