预处理+暴力,每个颜色都是独立的,求个前缀和,减一减判断一个在区间内颜色是否存在。
算了算复杂度好像有点勉强,但是还是过了,学了主席树以后用主席树在做一下
#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\n",ans); } return 0; }
本文介绍了一种使用预处理和暴力算法解决特定问题的方法。通过计算每种颜色的前缀和来判断区间内的颜色是否存在,进而求得答案。虽然算法的时间复杂度较高,但在本例中仍然能够有效地解决问题。

被折叠的 条评论
为什么被折叠?



