第一题
# include <bits/stdc++.h>
using namespace std;
vector<int> res,tmp;
map<int,vector<int>> m;
int n,love;
int nn,l,r,k,num;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&love);
m[love].push_back(i);
}
scanf("%d",&nn);
for(int i=0;i<nn;i++){
num=0;
scanf("%d%d%d",&l,&r,&k);
for(int index:m[k]){
if(index>=l&&index<=r)
num++;
}
res.push_back(num);
}
for(int i=0;i<res.size();i++){
printf("%d\n",res[i]);
}
}
第二题
#include<iostream>
#include <bits/stdc++.h>
using namespace std;
int n,m,c;
map<int,vector<int> > mp;
int main(){
cin>>n>>m>>c;
for(int i=1;i<=n;i++){//遍历每个珠子
int nn; //当前珠子的颜色数
cin>>nn;
for(int j=1;j<=nn;j++){//遍历该珠子的每个颜色
int color;
cin>>color;
mp[color].push_back(i);
}
}
int count=0;//记录不符合要求的颜色数
for(int i=1;i<=c;i++){//遍历所有颜色
sort(mp[i].begin(),mp[i].end()); //同色珠子的位置排序
int size = mp[i].size();
for(int j=1;j<size;j++){//遍历该颜色的各个珠子
if(mp[i][j]-mp[i][j-1]<m){
count++;
break;
}
if(mp[i][j]+m>n&&(mp[i][j]+m)%n>mp[i][0]){
count++;
break;
}
}
}
cout << count << endl;
}