acd - 1427 - Nice Sequence(线段树)
题意:一个由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(线段树)的更多相关文章
- 2016暑假多校联合---Rikka with Sequence (线段树)
2016暑假多校联合---Rikka with Sequence (线段树) Problem Description As we know, Rikka is poor at math. Yuta i ...
- Wow! Such Sequence!(线段树4893)
Wow! Such Sequence! Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- 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 ...
- hdu4893Wow! Such Sequence! (线段树)
Problem Description Recently, Doge got a funny birthday present from his new friend, Protein Tiger f ...
- HDU 6047 Maximum Sequence(线段树)
题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=6047 题目: Maximum Sequence Time Limit: 4000/2000 MS (J ...
- 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 ...
- hdu 5828 Rikka with Sequence 线段树
Rikka with Sequence 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5828 Description As we know, Rik ...
- 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区间上的所以数变成 ...
- hdu-5805 NanoApe Loves Sequence(线段树+概率期望)
题目链接: NanoApe Loves Sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/131072 ...
随机推荐
- DDLog-不同颜色打印信息
(一)下载安装 1.安装插件 XcodeColors Github 链接:https://github.com/robbiehanson/XcodeColors 打开XcodeColors项目,编译即 ...
- UITableView延伸:点击cell关闭键盘,加载不同cell,监听里面的textfeild内容改变
其实点击cell关闭键盘只要一句话 - () { cell = [tableView dequeueReusableCellWithIdentifier:){ cell ...
- Bzoj2007 [Noi2010]海拔(平面图最短路)
2007: [Noi2010]海拔 Time Limit: 20 Sec Memory Limit: 552 MBSubmit: 2742 Solved: 1318[Submit][Status] ...
- EC++学习笔记(六) 继承和面向对象设计
条款32:确定你的 public 继承塑模出 is-a 关系 public inheritance 意味着 is-a 关系class Derived 以 public 形式继承 class Base, ...
- calc BZOJ 2655
calc [问题描述] 一个序列a1,...,an是合法的,当且仅当: 长度为给定的n. a1,...,an都是[1,A]中的整数. a1,...,an互不相等. 一个序列的值定义为它里面所有数的乘积 ...
- 简单div遮罩
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- python文件追加及时间获取
一.python:文件的读取.创建.追加.删除.清空 2011-10-24 11:36:35| 分类: python |举报 |字号 订阅 一.用Python创建一个新文件,内容是从0到9的整数 ...
- nginx源码学习资源(不断更新)转
原文地址:http://www.cnblogs.com/yjf512/archive/2012/06/13/2548515.html nginx源码学习是一个痛苦又快乐的过程,下面列出了一些nginx ...
- java中的数据转换与前置,后置加加
public class Demo{ public static void main(String [] args){ int num=2; System.out.println(num++);//后 ...
- VS2015 当前不会命中断点,还没有为该文档加载任何符号
这种小问题,我想只需要清理解决方案重新生成就好啦,结果...2个小时过去后.. 最后问了昨天做过修改的同事,修改了什么.. 设置成生成调试信息,仅以此文纪念我那逝去的青春