列表

详情


NC214356. 最好的宝石

描述

牛牛有n个宝石,第i个宝石的价值是w[i].
有m个操作,操作分为两种类型
− Change   x  y   把第x个宝石的价值改成 y 
− Ask          l   r   询问区间[l,r]内宝石的最大价值,和最大价值的宝石有多少个。

输入描述

第一行两个整数 n , m (1 ≤ n,m ≤ 2e5)
第二行有n个整数 w[i]  (0 ≤ w[i] ≤ 1e9)
接下来m行,每行代表一个操作。具体见题目描述。

输出描述

每次询问输出一行,每行两个整数 val  cnt,val代表所有宝石中的最大价值,cnt代表价值最大的宝石有多少个。

示例1

输入:

5 3
2 4 3 6 8
Ask 1 5
Change 2 10
Ask 1 3

输出:

8 1
10 1

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(clang++11) 解法, 执行用时: 850ms, 内存消耗: 1344K, 提交时间: 2020-12-06 12:06:51

#include<stdio.h>
int a[200000];
int main()
{
	char b[10];
	int i,j,k,l,m,n,p1,p2,max;
	scanf("%d%d",&n,&m);
	for(i=0;i<n;i++)
	scanf("%d",&a[i]);
	for(i=0;i<m;i++){
		scanf("%s %d%d",b,&p1,&p2);
		if(b[0]=='A'){
			j=0;
			max=a[p1-1];
		for(k=p1;k<p2;k++){
			if(max<a[k])
			max=a[k];
		}
		for(k=p1-1;k<p2;k++)
		if(max==a[k])
		j++;
		printf("%d %d\n",max,j);
		}
		else
	a[p1-1]=p2;
		
	}
}

上一题