2019牛客多校B Beauty Values——思维题
2024-08-27 12:18:52
题目
求所有子区间中不同元素之和。
分析
枚举相邻的相同数字形成的区间,计算它是哪些区间的子区间,每次有-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
最新文章
- C#实现Levenshtein distance最小编辑距离算法
- SQLiteOpenHelper的使用
- Entity Framework 摘记
- css3 半个字符美化方法
- Winform 进程、线程、treeview
- 夺命雷公狗ThinkPHP项目之----企业网站14之文章修改页的完成
- pb对Web Service的操作可使用两种方式实现
- Iwpriv工作流程及常用命令使用
- Row_Number()over(order by....) as
- 【Android 错误记录】android.os.NetworkOnMainThreadException 异常问题
- cocos2dx 坐标和锚点
- LeetCode算法题-Toeplitz Matrix(Java实现)
- mysqlbinlog 工具分析binlog日志
- js获取文件后缀
- NOIP-金币
- Java关键字(五)——this
- tfs二次开发-利用tfs api做查询
- 【Codeforces 1137B】Camp Schedule
- HTTP 及相关知识
- 一个两年Java的面试总结
热门文章
- LeetCode 230. 二叉搜索树中第K小的元素(Kth Smallest Element in a BST)
- [转帖]中国x86服务器市场H1出货量大幅下滑:浪潮、戴尔和华为排名前三
- google test 打印派生类对象
- 利用Python进行数据分析 第7章 数据清洗和准备(1)
- 关于NumPy的常用函数random.randint
- littleFS在RT1052移植笔记
- java 禁用科学计数法
- maven一些简单常用却容易记混的命令参数-U -e -B
- for_each使用方法详解
- vue-cli3.0 关闭eslint校验