Problem - C - Codeforces

Toxel喜欢数组。在前往帕尔迪亚地区之前,塞瓦尔给了他一个阵列作为礼物。这个数组有n个成对不同的元素。为了获得更多的数组,Toxel对初始数组进行了m次操作。在第i个操作中,他将第(i - 1)-th数组的第p个元素修改为v,得到第i个数组(初始数组a编号为0)。在修改过程中,Toxel保证每个数组的元素在每次操作后仍然是成对不同的。最后,Toxel得到m +1个数组,记为Ao = a, A1,…,我。对于每一对(2,j) (0 <i <j< m), Toxel将其值定义为Ai和Aj的级联中不同元素的数量。现在Toxel想知道,所有对的值的和是多少?请帮他算一下答案。输入每个测试包含多个测试用例。第一行包含测试用例的数量t (1 < t < 104)。测试用例的描述是流畅的。每个测试用例的第一行包含两个整数n和m (1 < n, m < 2-105)——数组的长度和操作的数量。每个测试用例的第二行包含n个整数a1, a2,…, an (1 < a < n + m)。保证所有a,是成对不同的。每个测试用例下m行的每一行都包含两个整数p;v (1 <pi Sn, 1 <o Sn + m)-被修改的元素的位置和它的新值。它保证每个数组的元素在每次修改后仍然是成对不同的。保证所有测试用例的n和m之和不超过2- 105。输出对于每个测试用例,打印一个整数——所有数组对的值的和。

Example

input

Copy

3

3 2

1 2 3

1 4

2 5

1 1

1

1 1

10 10

4 6 9 12 16 20 2 10 19 7

1 3

5 4

2 17

2 18

6 11

7 1

8 17

5 5

5 5

2 2

output

Copy

13
1
705

请注意在第一个测试用例中,数组的变化如下:[1,2,3][4,2,3][4,5,3]。第0个数组和第1个数组的连接为[1,2,3,4,2,]。有4个不同的元素。第0个数组和第2个数组的连接为[1,2,3,4,5,3]。有5个不同的元素。1-st数组和2-nd数组的连接为[4,2,3,A,5,]。有4个不同的元素。删除线元素是数组中的重复元素。因此,答案是4+5+4= 13。在第二个测试用例中,注意数组在操作之后可能保持不变。

题解:

题中保证无论如何更新,数组内都不会出现相等的数,也就是对于某个数字在一个数组内最多出现一次,只需要统计一下这个数出现的次数就可以知道这个数在多少个数组内

假设一个数出现在数组中次数为m次,总数组数为n

包含一个数

1.与其他数组中有相同的数,

m*(n-m)对答案贡献

2.没有与其他数组有相同的数

总贡献为 +m*(n-m)

 关于统计次数,我们发现一个数的出现次数是一段一段的,所以我们开一个数组记录上一次更新的位置,每次另一起一段的时候更新位置,并把旧的一段统计如数组即可。注意,最后残余的要清理干净。

#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
#include<vector>
#include<map>
#include<queue>
using namespace std;
#define int long long
const int N = 6e5 + 10;
int cnt[N];
int a[N];
int st[N];
void solve()
{int n,m;cin >> n >> m;for(int i = 1;i <= n+m;i++){cnt[i] = 0;st[i] = 0;}for(int i = 1;i <= n;i++){cin >> a[i]; }for(int i = 1;i <= m;i++){int p,v;cin >> p >> v;if(a[p] != v){cnt[a[p]] += i - st[p];//i - st[p]上个数的出现的次数,st[p]是上一次数出现的位置st[p] = i;}a[p] = v;}for(int i = 1;i <= n;i++){cnt[a[i]] += m - st[i] + 1;//最终更新到最后是没有更新过,也没有记录的,所以要记录上}int ans = 0;for(int i = 1;i <= n + m;i++){ans += cnt[i]*(m + 1 - cnt[i]);ans += cnt[i]*(cnt[i] - 1)/2;}cout << ans <<"\n";
}
signed main()
{int t = 1;cin >> t;while(t--){solve();}
}

C. Serval and Toxel‘s Arrays(数学贡献法)相关推荐

  1. C. Bargain(数学贡献法)

    Problem - 1422C - Codeforces 有时,要在讨价还价中达成协议并不容易.现在,萨沙和沃瓦就无法达成协议.萨沙说出了一个尽可能高的价格,然后沃瓦想从这个价格中删除尽可能多的数字. ...

  2. 【Codeforces Round #853 (Div. 2)】C. Serval and Toxel‘s Arrays【题解】

    题目 Toxel likes arrays. Before traveling to the Paldea region, Serval gave him an array a a a as a gi ...

  3. C. Serval and Toxel‘s Arrays(容斥+按值算贡献

    Problem - C - Codeforces 题意:一个 n 长的值成对不同数组,有 m 次变化,每次执行一次 p 位置,改为 v 值[保证每次改完的数组内的值成对不同],计算所有 m + 1 的 ...

  4. Codeforces Round #853 (Div. 2) C. Serval and Toxel‘s Arrays【统计次数,算贡献】

    链接 传送门 分析 这道题想法其实很简单,样例的计算方法一定要看懂.以样例1为例,根据他的操作方法可以得到两个新的数组,和一个原来的数组,总共三个数组. 1 2 3 4 2 3 4 5 3 他们两两配 ...

  5. C. Serval and Toxel‘s Arrays

    传送门 题目 给你一个长度为n的数组和m次修改,每次修改会将其中的一个数字修改成另一个数字然后形成一个新数组,初始数组和修改过程的数组保证没有相同的数字,问你所有任意两个数组之间去重之后元素的数量的和 ...

  6. C. Serval and Toxel‘s Arrays codeforces1789C

    Problem - C - Codeforces 题目大意:有一长度为n的字符串a,有m次操作,每次操作将a中位置为x的数修改成y,从而产生一个新的数组,产生了m个数组后,将这m个数组和原数组a,两两 ...

  7. LL1分析构造法_16条数学得分法,想提分快来看!

    距离高考不足百日,在注重数学基础的同时,也要注重技巧,好迅速拿分,今天送同学们一份数学得分法,帮助同学们最大限度得分,在高考中取得最高分! 1.圆锥曲线中最后题往往联立起来很复杂导致k算不出,这时你可 ...

  8. 数字图像学笔记——13. 图像退化与复原(退化函数的评估方法:观察法、实验法、数学建模法与湍流导致的退化)

    在对受到多种原因影响的图像进行复原时,我们经常需要先行评估对图像质量产生影响的退化函数,有时甚至需要尝试建模.通过这些手段,能够最大程度上恢复图像上的噪音,并重建高清的图像细节. 文章目录 线性位置不 ...

  9. 比武招亲(上)(思维+贡献法+组合数学隔板法详解)

    https://ac.nowcoder.com/acm/contest/9985/B 思路: 首先贡献法考虑每个数作为最大值出现的次数和最小值出现的次数. 那么最终答案其实是xi作为最大数-xj作为最 ...

最新文章

  1. Python CRC32 文件校验
  2. java trace优化_使用Arthas trace定位并优化接口响应慢的问题.md
  3. java 中的finally你知多少_Java 处理异常 9 个最佳实践,你知道几个?
  4. 大数据征信需把控 数据源的“量”与“度”
  5. UML系统分析与设计01-准备
  6. ContextLoaderListener作用详解
  7. 《Head First Python》第四章--持久存储
  8. SpringCloud学习笔记:服务注册与发现Eureka(2)
  9. Linux-nginx安装
  10. 刀片服务器更换纽扣电池系统起不来,莆田四龄童将纽扣电池塞入鼻孔 医生建议手术遭拒...
  11. 不确定度计算器_内审员、LIMS系统、外部评审员、不确定度、注册计量师、实验数据分析处理、质量控制和期间核查、方法验证和确认 网络培训汇总...
  12. 设计系统测试用例时应考虑的类型
  13. 手把手带撸Junior AlphaGo算法「AI工程论」
  14. C# 中的Finalize 和Dispose(bool disposing)和 Dispose()
  15. Docker学习文档
  16. 在Pycharm中,全文搜索、替换,以及单独文件搜索、替换!
  17. ACM如何入门,ACM竞赛需要学习哪些算法?
  18. 野蔷薇的伤感人生日志:已失落于尘埃,再也找寻不得
  19. PHP抓取某页面指定内容
  20. threejs修改旋转中心 小程序

热门文章

  1. [ffmpeg][qsv][windows]windows下配置fmpeg英特尔qsv
  2. websocket心跳链接代码_websocket心跳的实现(包括全部代码)
  3. MapRecuce 词频统计案例
  4. xDSL(Digital Subscribe Line,数字用户线路)
  5. git部署和github远程仓库搭建
  6. 贪心算法|柠檬水找零
  7. iOS崩溃日志分析-b
  8. calibre drc lvs 文件位置
  9. 计算机找不到m337,罗技M337鼠标改装静音鼠标
  10. 大疆无人机无图像传输_大疆无人机靠什么传输信号