题目

求所有子区间中不同元素之和。

分析

枚举相邻的相同数字形成的区间,计算它是哪些区间的子区间,每次有-1的贡献,将其从总贡献中减去。

#include<bits/stdc++.h>
using namespace std; typedef long long ll;
const int maxn = + ;
int n;
vector<int>a[maxn];
int limit; //出现过的最大值 int main()
{
scanf("%d", &n);
for(int i = ;i <= n;i++)
{
int tmp;
scanf("%d", &tmp);
a[tmp].push_back(i);
if(tmp > limit) limit = tmp;
}
ll ans = ;
for(int i = ;i <= n;i++) ans += 1LL * (n + - i) * i; //总贡献 for(int i = ;i <= limit;i++)
{
int pre = a[i][];
for(int j = ;j < a[i].size();j++)
{
if(pre == ) ans -= (n - a[i][j] + );
else if(a[i][j] == n) ans -= pre;
else ans -= (1LL * pre * (n - a[i][j] + ));
pre = a[i][j]; }
}
printf("%lld\n", ans);
return ;
}

这里遍历了两遍,队友写的只遍历一遍,更加简短。https://ac.nowcoder.com/acm/contest/view-submission?submissionId=41082850

最新文章

  1. C#实现Levenshtein distance最小编辑距离算法
  2. SQLiteOpenHelper的使用
  3. Entity Framework 摘记
  4. css3 半个字符美化方法
  5. Winform 进程、线程、treeview
  6. 夺命雷公狗ThinkPHP项目之----企业网站14之文章修改页的完成
  7. pb对Web Service的操作可使用两种方式实现
  8. Iwpriv工作流程及常用命令使用
  9. Row_Number()over(order by....) as
  10. 【Android 错误记录】android.os.NetworkOnMainThreadException 异常问题
  11. cocos2dx 坐标和锚点
  12. LeetCode算法题-Toeplitz Matrix(Java实现)
  13. mysqlbinlog 工具分析binlog日志
  14. js获取文件后缀
  15. NOIP-金币
  16. Java关键字(五)——this
  17. tfs二次开发-利用tfs api做查询
  18. 【Codeforces 1137B】Camp Schedule
  19. HTTP 及相关知识
  20. 一个两年Java的面试总结

热门文章

  1. LeetCode 230. 二叉搜索树中第K小的元素(Kth Smallest Element in a BST)
  2. [转帖]中国x86服务器市场H1出货量大幅下滑:浪潮、戴尔和华为排名前三
  3. google test 打印派生类对象
  4. 利用Python进行数据分析 第7章 数据清洗和准备(1)
  5. 关于NumPy的常用函数random.randint
  6. littleFS在RT1052移植笔记
  7. java 禁用科学计数法
  8. maven一些简单常用却容易记混的命令参数-U -e -B
  9. for_each使用方法详解
  10. vue-cli3.0 关闭eslint校验