题意:一个由n个数组成的序列(序列元素的范围是[0, n])。求最长前缀 j 。使得在这个前缀 j 中对于随意的数 i1 < i2。都满足随意的 m <= j。i1 在前 m 个数里出现的次数 >= i2 在前 m 个数里出现的次数 - k (1 ≤ n ≤ 200 000, 0 ≤ k ≤ 200 000)。

题目链接:http://acdream.info/problem?pid=1427

——>>第一个前缀 j 不满足。那么后面的前缀一定不满足(由于前缀 j 不满足)。

所以,从左往右扫描,每次取全部数字 i 的最少出现次数与当前扫描到的数出现的次数比較看是否满足条件就可以。

全部数字 i 指的是哪些数字呢?是已经出现过的数吗?例子2说明不是。。是不大于当前出现过的最大整数吗?WA告诉我不是。

。而是 <= a[j] 的全部非负整数。

全部数字 i 出现次数的最小值。我想到了RMQ和线段树,最后选了线段树来维护这个最小值。

#include <cstdio>
#include <cstring>
#include <algorithm> #define lc (o << 1)
#define rc ((o << 1) | 1) using std::min;
using std::max; const int MAXN = 200000 + 10;
const int INF = 0x3f3f3f3f; int n, k, Max;
int minv[MAXN << 2], cnt[MAXN];
int a[MAXN]; void Read()
{
Max = -1;
for (int i = 1; i <= n; ++i)
{
scanf("%d", a + i);
++a[i];
if (a[i] > Max)
{
Max = a[i];
}
}
} void Build(int o, int L, int R)
{
minv[o] = 0;
if (L == R) return;
int M = (L + R) >> 1;
Build(lc, L, M);
Build(rc, M + 1, R);
} void Update(int o, int L, int R, int q)
{
if (L == R)
{
minv[o] = cnt[q];
return;
}
int M = (L + R) >> 1;
if (q <= M) Update(lc, L, M, q);
else Update(rc, M + 1, R, q);
minv[o] = min(minv[lc], minv[rc]);
} int Query(int o, int L, int R, int ql, int qr)
{
if (ql <= L && R <= qr)
{
return minv[o];
}
int ret = INF;
int M = (L + R) >> 1;
if (ql <= M) ret = min(ret, Query(lc, L, M, ql, qr));
if (qr > M) ret= min(ret, Query(rc, M + 1, R, ql, qr)); return ret;
} void Solve()
{
int i; memset(cnt, 0, sizeof(cnt));
for (i = 1; i <= n; ++i)
{
++cnt[a[i]];
Update(1, 1, Max, a[i]);
if (Query(1, 1, Max, 1, a[i]) < cnt[a[i]] - k) break;
}
printf("%d\n", i - 1);
} int main()
{
while (scanf("%d%d", &n, &k) == 2)
{
Read();
Build(1, 1, Max);
Solve();
} return 0;
}

acd - 1427 - Nice Sequence(线段树)的更多相关文章

  1. 2016暑假多校联合---Rikka with Sequence (线段树)

    2016暑假多校联合---Rikka with Sequence (线段树) Problem Description As we know, Rikka is poor at math. Yuta i ...

  2. Wow! Such Sequence!(线段树4893)

    Wow! Such Sequence! Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...

  3. Codeforces Round #250 (Div. 1) D. The Child and Sequence 线段树 区间取摸

    D. The Child and Sequence Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest ...

  4. hdu4893Wow! Such Sequence! (线段树)

    Problem Description Recently, Doge got a funny birthday present from his new friend, Protein Tiger f ...

  5. HDU 6047 Maximum Sequence(线段树)

    题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=6047 题目: Maximum Sequence Time Limit: 4000/2000 MS (J ...

  6. Codeforces 438D The Child and Sequence - 线段树

    At the children's day, the child came to Picks's house, and messed his house up. Picks was angry at ...

  7. hdu 5828 Rikka with Sequence 线段树

    Rikka with Sequence 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5828 Description As we know, Rik ...

  8. hdu 4893 Wow! Such Sequence!(线段树)

    题目链接:hdu 4983 Wow! Such Sequence! 题目大意:就是三种操作 1 k d, 改动k的为值添加d 2 l r, 查询l到r的区间和 3 l r. 间l到r区间上的所以数变成 ...

  9. hdu-5805 NanoApe Loves Sequence(线段树+概率期望)

    题目链接: NanoApe Loves Sequence Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 262144/131072 ...

随机推荐

  1. BZOJ 1069 [SCOI2007]最大土地面积 ——计算几何

    枚举对角线,然后旋转卡壳即可. #include <map> #include <cmath> #include <queue> #include <cstd ...

  2. 【DFS序+树状数组】HDU 3887 Counting Offspring

    http://acm.hdu.edu.cn/showproblem.php?pid=3887 [题意] 给定一棵树,给定这棵树的根 对于每个结点,统计子树中编号比他小的结点个数 编号从小到大一次输出 ...

  3. #ifdef endif 用法

    "#ifdef 语句1 程序2 #endif“ 可翻译为:如果宏定义了语句1则程序2. 作用:我们可以用它区隔一些与特定头文件.程序库和其他文件版本有关的代码. 代码举例:新建define. ...

  4. BS4(BeautifulSoup4)的使用--find_all()篇

    可以直接参考 BS4文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html#find-all 注意的是: 1.有些 ...

  5. Java面试题集(一)

    作为一名java开发软件工程,一定要记住,基础非常重要,往往就是一些基础,很简单,但是你就是不知道实现原理,为什么使用,有没有自己去发现,对比,差异从而总结,有些东西看似简单,但是不一定你描述清楚,直 ...

  6. msp430项目编程56

    msp430综合项目---扩展项目六56 1.电路工作原理 2.代码(显示部分) 3.代码(功能实现) 4.项目总结

  7. HTML 中 SELECT 选项分组

    <select name="viewType"> <option value selected>选择排序/显示方式</option> <o ...

  8. (1)git

    1.创建一个版本库 #创建一个文件夹 E:\>mkdir pythonGit #进入文件夹 E:\>cd pythonGit #把此目录创建成git版本库 E:\pythonGit> ...

  9. codevs——1503 愚蠢的宠物

    1503 愚蠢的宠物  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description 大家都知道,sheep有两 ...

  10. Java中的类反射

    一.反射的概念 : 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序 ...