HDU 5247 找连续数 (set妙用)

题目链接:?pid=5247题目分析:用set做,离线预处理满足条件的各长度区间数量,,因为set自带排序,因此一旦一个不包含重复数字的连续区间里最大值减去最小值加一等于这个区间长度,那么这个区间就是我们要找的合法区间,记录下来#include <cstdio>#include <cstring>#include <algorithm>#include <set>using namespace std;int const MAX = 1e4 + 5;int a[MAX], ans[MAX];set <int> s;int main(){int n, m, ca = 1;while(scanf("%d %d", &n, &m) != EOF){printf("Case #%d:\n", ca ++);memset(ans, 0, sizeof(ans));for(int i = 0; i < n; i++)scanf("%d", &a[i]);for(int i = 0; i < n; i++){s.clear();s.insert(a[i]);ans[1] ++;for(int j = i + 1; j < n; j++){set <int> :: iterator it;it = s.find(a[j]);if(it != s.end())break;s.insert(a[j]);int st = *s.begin();it –;int ed = *it;int sz = s.size();if(ed – st + 1 == sz)ans[sz] ++;}}for(int i = 0; i < m; i++){int k;scanf("%d", &k);printf("%d\n", ans[k]);}}}

人生没有彩排,每一天都是现场直播

HDU 5247 找连续数 (set妙用)

相关文章:

你感兴趣的文章:

标签云: