预处理+暴力,每个颜色都是独立的,求个前缀和,减一减判断一个在区间内颜色是否存在。
算了算复杂度好像有点勉强,但是还是过了,学了主席树以后用主席树在做一下
#include<bits/stdc++.h> using namespace std; const int maxn = 1e4+4; const int maxm = 256; int col[maxm][maxn]; int main() { freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); int n,k; scanf("%d%d",&n,&k); for(int i = 1; i <= n; i++){ int c; scanf("%d",&c); for(int j = 1; j < maxm; j++){ col[j][i] = col[j][i-1]; } col[c][i]++; } while(k--){ int l,r; scanf("%d%d",&l,&r); l--; int ans = 0; for(int i = 1; i < maxm; i++){ if(col[i][r]-col[i][l]) ans++; } printf("%d ",ans); } return 0; }