题意:一个由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之注册表增删改查(干货)

    在Windows平台下,对注册表的增删改查的需求比较多,微软提供了很多用于访问,修改注册表等的API,我们可以使用诸如bat,或者C++等各种方式去访问修改注册表.无所不能的python下如何完成这些 ...

  2. 【bzoj4889】[Tjoi2017]不勤劳的图书管理员 树状数组+分块+二分

    题目描述(转自洛谷) 加里敦大学有个帝国图书馆,小豆是图书馆阅览室的一个书籍管理员.他的任务是把书排成有序的,所以无序的书让他产生厌烦,两本乱序的书会让小豆产生这两本书页数的和的厌烦度.现在有n本被打 ...

  3. BZOJ 3782 上学路线 ——动态规划 Lucas定理 中国剩余定理

    我们枚举第一个经过的坏点,然后DP即可. 状态转移方程不是难点,难点在于组合数的处理. 将狼踩尽的博客中有很详细的证明过程,但是我只记住了结论 $n=a_1 * p^k+a_2*p^k-1...$ $ ...

  4. USACO Hamming Codes

    题目大意:求n个两两hamming距离大于等于d的序列,每个元素是一个b bit的数 思路:仍然暴力大法好 /*{ ID:a4298442 PROB:hamming LANG:C++ } */ #in ...

  5. 洛谷P3143 [USACO16OPEN]钻石收藏家Diamond Collector

    题目描述 Bessie the cow, always a fan of shiny objects, has taken up a hobby of mining diamonds in her s ...

  6. net8:XML的读写操作【广告控件的XML文件实例】

    原文发布时间为:2008-08-05 -- 来源于本人的百度文章 [由搬家工具导入] 【用了datalist控件,datalist控件自己学会,主要知道其他按钮COMMANDNAME属性应该改为edi ...

  7. gdbt原理解析

    链接: http://note.youdao.com/noteshare?id=aeb1c7a30c5f4b70e3fff51f28ee5c47 懒得复制到这里了,一开始是在有道云笔记上写的,这里的公 ...

  8. Android SurfaceView与View

    SurfaceView介绍 SurfaceView是视图(View)的继承类,这个视图里面内嵌了一个专门用于绘制的Surface.你可以控制这个Surface的格式和尺寸,而SurfaceView控制 ...

  9. Codeforces Round #511 (Div. 2) C. Enlarge GCD

    题目链接 题目就是找每个数的最小素因子,然后递归除,本来没啥问题,结果今天又学习了个新坑点. 我交了题后,疯狂CE,我以为爆内存,结果是,我对全局数组赋值, 如果直接赋值,会直接在exe内产生内存,否 ...

  10. gcc、arm-Linux-gcc和arm-elf-gcc的组成及区别

    2017-01-19 嵌入式ARM 嵌入式ARM 一.GCC简介 The GNU Compiler Collection,通常简称 GCC,是一套由 GNU 开发的编译器集,为什么是编辑器集而不是编译 ...