C. Pearls in a Row
time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

There are
n pearls in a row. Let's enumerate them with integers from
1 to
n from the left to the right. The pearl number
i has the type
ai.

Let's call a sequence of consecutive pearls a
segment. Let's call a segment
good if it contains two pearls of the same type.

Split the row of the pearls to the maximal number of good segments. Note that each pearl should appear in exactly one segment of the partition.

As input/output can reach huge size it is recommended to use fast input/output methods: for example, prefer to use

scanf/printf instead of
cin/cout in C++, prefer to use
BufferedReader/PrintWriter instead of
Scanner/System.out in
Java.

Input

The first line contains integer
n (1 ≤ n ≤ 3·105)
— the number of pearls in a row.

The second line contains
n integers
ai (1 ≤ ai ≤ 109)
– the type of the
i-th pearl.

Output

On the first line print integer
k — the maximal number of segments in a partition of the row.

Each of the next
k lines should contain two integers
lj, rj
(1 ≤ lj ≤ rj ≤ n)
— the number of the leftmost and the rightmost pearls in the
j-th segment.

Note you should print the correct partition of the row of the pearls, so each pearl should be in exactly one segment and all segments should contain two pearls of the same type.

If there are several optimal solutions print any of them. You can print the segments in any order.

If there are no correct partitions of the row print the number "-1".

Examples
Input
5
1 2 3 4 1
Output
1
1 5
Input
5
1 2 3 4 5
Output
-1
Input
7
1 2 1 3 1 2 1
Output
2
1 3
4 7

这题找规律,从第一个数开始向后搜索,当有一个数字重复时则记录该位置,再从下一个数字开始向后重新搜索。可使用STL中的set函数

AC代码

#include<stdio.h>
#include<set>
using namespace std;
int pos[300005];
set<int>a;
int main()
{
int n,m=0,b;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&b);
if(a.count(b)==0)//检查b是否出现过
{
a.insert(b);//在末尾插入b
}
else
{
pos[m]=i;
m++;
a.clear();//清除a中数据
} }
if(m==0)
{
printf("-1\n");
}
else
{
pos[m-1]=n;
printf("%d\n",m);
printf("1 %d\n",pos[0]);
for(int i=0;i<m-1;i++)
{
printf("%d %d\n",pos[i]+1,pos[i+1]);
}
}
return 0;
}

最近刚学的STL,本来想用循环来搜索重复数字的,结果超时,不过可作为思路

#include<stdio.h>
int a[300005],pos[300005];
int main()
{
int n,m=0;
pos[m]=0;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
for(int j=pos[m]+1;j<i;j++)
{
if(a[j]==a[i])
{
m++;
pos[m]=i;
}
}
}
if(m==0)
{
printf("-1\n");
}
else
{
pos[m]=n;
printf("%d\n",m);
printf("1 %d\n",pos[1]);
for(int i=1;i<m;i++)
{
printf("%d %d\n",pos[i]+1,pos[i+1]);
}
}
return 0;
}

CodeForces - 620C Pearls in a Row 贪心 STL的更多相关文章

  1. CodeForces 620C Pearls in a Row

    水题,每当出现重复就分割开来,最后留下的尾巴给最后一段 #include<cstdio> #include<cstring> #include<cmath> #in ...

  2. codeforces C. Pearls in a Row map的应用

    C. Pearls in a Row time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  3. cf 620C Pearls in a Row(贪心)

    d.有一串数字,要把这些数字分成若干连续的段,每段必须至少包含2个相同的数字,怎么分才能分的段数最多? 比如 是1 2 1 3 1 2 1 那么 答案是 21 34 7 即最多分在2段,第一段是1~3 ...

  4. Codeforces Round #595 (Div. 3)D1D2 贪心 STL

    一道用STL的贪心,正好可以用来学习使用STL库 题目大意:给出n条可以内含,相交,分离的线段,如果重叠条数超过k次则为坏点,n,k<2e5 所以我们贪心的想我们从左往右遍历,如果重合部分条数超 ...

  5. Codeforces 620C EDU C.Pearls in a Row ( set + greed )

    C. Pearls in a Row There are n pearls in a row. Let's enumerate them with integers from 1 to n from ...

  6. 【32.26%】【codeforces 620C】Pearls in a Row

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  7. Educational Codeforces Round 6 C. Pearls in a Row

    Educational Codeforces Round 6 C. Pearls in a Row 题意:一个3e5范围的序列:要你分成最多数量的子序列,其中子序列必须是只有两个数相同, 其余的数只能 ...

  8. Educational Codeforces Round 6 C. Pearls in a Row set

    C. Pearls in a Row There are n pearls in a row. Let's enumerate them with integers from 1 to n from ...

  9. CF620C Pearls in a Row

    CF620C Pearls in a Row 洛谷评测传送门 题目描述 There are nn pearls in a row. Let's enumerate them with integers ...

随机推荐

  1. 微信 js-sdk

    使用方法 http://mp.weixin.qq.com/wiki/11/74ad127cc054f6b80759c40f77ec03db.html Demo http://203.195.235.7 ...

  2. python 压缩每周生成的数据文件

    为了便于整理部分业务数据,以及存储管理, 写了此脚本.后期如果有需求,再改一下. #!/usr/bin/env python #coding:utf8 import os,sys,time,comma ...

  3. why inline functions must be put in header files?

    [why inline functions must be put in header files?] 编译中有2个过程:compile.link.先进行compile,compile中把源代码编译成 ...

  4. CPU字节序

    小端存储:低对低,高对高(低位存储在低地址,高位存储在高地址) 大端存储:低对高,高对低(低位存储在高地址,高位存储在低地址)   小端字节序: x86体系结构,arm指令只支持小端,数据支持大小端 ...

  5. HDU 1010 Tempter of the Bone (广搜+减枝)

    题目链接 Problem Description The doggie found a bone in an ancient maze, which fascinated him a lot. How ...

  6. CentOS Linux 7 安装教程

    建立新的虚拟机 将CentOS 7 ISO文件插入到CD-Rom 启动虚拟机,F12选择启动方式为CD/DVD 选择Install CentOS Linux 7 加载安装必要文件 选择安装过程所显示的 ...

  7. windebug常用命令

    使用~查看所有线程 切换到一号线程:~1s 查看所有线程的托管堆栈  ~* e!clrstack 怎么查看,当前线程下,变量的信息? 对于托管代码而言,最核心的命令就是!do(dump object的 ...

  8. iptables详细设置

    1.安装iptables防火墙 怎么知道系统是否安装了iptables?执行iptables -V,如果显示如: iptables v1.3.5 说明已经安装了iptables. 如果没有安装ipta ...

  9. 【Git】Git与GitHub 入门【转】

    转自:http://www.cnblogs.com/lcw/p/3394545.html GitHub GitHub是一个基于git的代码托管平台,付费用户可以建私人仓库,我们一般的免费用户只能使用公 ...

  10. 芒果TV 视频真实的地址获取

    # coding=utf-8 import requests import json import re import os import urlparse import random vid = r ...