题意

给出一个数组,有2种操作,把第i个位置的数变为x,求前i个位置的数里等于x的数有多少个?

思路

考虑数据范围,n和q都只有200,直接暴力维护就可以。对于操作1,把数组idx-1的值变为x;对于操作2,从0遍历到idx-1,如果当前数等于x,答案加1。是idx-1的原因是数组下标从0开始。扩展:本质是一个单点修改区间查询的问题,如果n,q <=1e5,可以考虑用数据结构维护

Go代码

package main

import (
	"fmt"
)

func main() {
	var n, q, op, idx, x int
	fmt.Scan(&n, &q)
	a := make([]int, n)
	for i := 0; i < n; i++ {
		fmt.Scan(&a[i])
	}
	for i := 0; i < q; i++ {
		fmt.Scan(&op, &idx, &x)
		idx--
		if op == 1 {
			a[idx] = x
		} else {
			var ans int
			for j := 0; j <= idx; j++ {
				if a[j] == x {
					ans++
				}
			}
			fmt.Println(ans)
		}
	}

}