题意:一个由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. python ConfigParser 学习

    [安装] ConfigParser 是解析配置文件的第三方库,需要安装 pip install ConfigParser   [介绍] ConfigParser 是用来读取配置文件(可以是.conf, ...

  2. BZOJ2246 [SDOI2011]迷宫探险 【记忆化搜索dp + 概率】

    题目 输入格式 输出格式 仅包含一个数字,表示在执行最优策略时,人物活着走出迷宫的概率.四舍五入保留3位小数. 输入样例 4 3 3 2 .$. A#B A#C @@@ 143 37 335 85 9 ...

  3. 刷题总结——art2(ssoj)

    题目: 题解: o(n)复杂度扫一遍再用一个stack维护就可以了·····mdzz这道题都不会做·· 代码: #include<iostream> #include<cstdio& ...

  4. 使用镜像源安装EASY_INSTALL和PIP教程

    使用easy_install和pip可以让python的模块的安装和管理变得非常方便.我一般在新的Linux系统上,先easy_install pip然后就用pip安装其他的模块了. 不过,在国内用官 ...

  5. *LOJ#6227. 「网络流 24 题」最长k可重线段集问题

    $n \leq 500$条平面上的线段,问一种挑选方法,使得不存在直线$x=p$与挑选的直线有超过$k$个交点,且选得的直线总长度最长. 横坐标每个点开一个点,一条线段就把对应横坐标连一条容量一费用( ...

  6. 标准C程序设计七---04

    Linux应用             编程深入            语言编程 标准C程序设计七---经典C11程序设计    以下内容为阅读:    <标准C程序设计>(第7版) 作者 ...

  7. 一个强大的Android模拟器Genymotion

    相信很多Android开发者一定受够了速度慢.体验差效率及其地下的官方模拟器了,自己在平时的开发中几乎是不会用模拟器的,等的时间太久了,但是在一些尺寸适配或是兼容性测试的时候没有足够多的机器进行测试, ...

  8. 服务器Out of Memory

    之前有次把图片存储在数据库,结果读取时候报错了:Out of Memory.. 图片本来不应该存储在数据库中的,消耗内存太大,既然已经这样,那就先解决问题,不改存储方式. 如果一个应用程序为了提高性能 ...

  9. LayUI后台管理与综合示例

    一.LayUI介绍 layui(谐音:类UI) 是一款采用自身模块规范编写的前端 UI 框架,遵循原生 HTML/CSS/JS 的书写与组织形式,门槛极低,拿来即用.其外在极简,却又不失饱满的内在,体 ...

  10. Scala学习笔记 & 一些不错的学习材料 & 函数编程的历史八卦

    参考这篇文章: http://www.ibm.com/developerworks/cn/java/j-lo-funinscala1/ 这也是一个系列 严格意义上的编程范式分为:命令式编程(Imper ...