题目来源: Codility
基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题
一个数组包含N个正整数,其中有些是重复的。一个前缀后缀集是满足这样条件的下标对(P,S), 0<= P,S < N 满足数组元素A[0..P]的值也在A[S..N - 1]的值中出现,并且A[S..N - 1]中的值也再A[0..P]中出现。换句话说前缀的集合A[0..P]与后缀集合A[S..N - 1]包含完全相同的值。求这样的前缀后缀集合的数量。
 
例如:3 5 7 3 3 5,共有14个集合符合条件:(1, 4), (1, 3), (2, 2), (2, 1), (2, 0), (3, 2), (3, 1), (3, 0), (4, 2), (4, 1), (4, 0), (5, 2), (5, 1), (5, 0)
本题由 @javaman 翻译。
 
Input
第1行:一个数N, 表示数组的长度(1 <= N <= 50000)。
第2 - N + 1行:每行1个数,对应数组中的元素Ai。(1 <= Ai <= 10^9)
Output
输出符合条件的集合数量。
Input示例
6
3
5
7
3
3
5
Output示例
14

//似乎简单的贪心就能做,或者说叫枚举,枚举顺序的所有区间
分情况讨论清楚,
1、当顺序是一个已出现的值,累加相同区间个数即可
2、当出现一个新值,map记录一下,不同的值的个数++,然后扩充后缀区间,直到出现新值,或者不同的值个数为0,就可以累加答案了
这样,时间复杂度是 O(n*lgn)
 #include <bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
#define eps 1e-9
#define LL long long
#define MX 50005 int n;
int dat[MX];
LL ans; void func()
{
int R = n, dif = , res = ;
map<int,int> mp;
for (int i=;i<=n;i++)
{
if (mp.count(dat[i])) //如果是重复的,加上个数即可
{
ans += res;
continue;
}
mp[dat[i]]=; dif++;
res=;
while (R>=&&mp.count(dat[R]))
{
if (mp[dat[R]]==)
{
mp[dat[R]]=;
dif--;
}
if (dif==)
{
ans++;
res++;
}
R--;
}
}
} int main()
{
while(scanf("%d",&n)!=EOF)
{
for (int i=;i<=n;i++)
scanf("%d",&dat[i]);
ans = ;
func();
printf("%lld\n",ans);
}
return ;
}
 

最新文章

  1. ArcGIS server 开发实践之【FeatureLayer类】
  2. 我的Linux对拍脚本
  3. Mybatis 开启事务@Transactional
  4. EF OnModelCreating
  5. javascript 回车提交指定按钮
  6. python 本地文档查看
  7. Outlook2010 移动数据文件到其它地方
  8. Spring编程风格
  9. HttpWebRequest 上传图片
  10. 通常我们使用[NSDate date]方法得到的时间与当前时间不一致,如何解决?
  11. Jquery获取背景图片src路径
  12. C语言初学 测定各数据类型的长度
  13. PBO
  14. 购买的wemall 6.0商城系统源码分享
  15. java事件处理机制
  16. 数据结构(C++)之Double Linked List实践
  17. Thread之十:停止线程方法汇总
  18. Publisher/Subscriber
  19. 半吊子的STM32 — IIC通信
  20. Oracle自学笔记(一)

热门文章

  1. Mysql 中文中繁杂的字 插入报错的 解决方案
  2. python——深刻理解Python中的元类(metaclass)
  3. 表单提交post和get方法区别
  4. attempt to dereference a generic a pointer(转)
  5. hdu 4723 How Long Do You Have to Draw(贪心)
  6. 【JAVA秒会技术之秒杀面试官】秒杀Java面试官——集合篇(一)
  7. Oracle 存储过程调用返回游标的另一个存储过程。
  8. Mysql中获取行号
  9. 神奇的CAReplicatorLayer
  10. 【MyBatis】MyBatis分页插件PageHelper的使用