CF624div3-C. Perform the Combo 【差分】
CF624div3-C. Perform the Combo
题目
AC代码
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <set>
#include <cstring>
#include <string>
#include <cmath>
using namespace std;
typedef unsigned long long ll;
ll T,N,M;
int cnt[256];
int pos[1000010];
int cnt2[1000010];
char str[1000010];
void fun(){
for(ll i = 0;i<N;i++){
cnt[str[i]-'a']++;
if(pos[i]){
cnt2[0]+=pos[i];
cnt2[i+1]-=pos[i];
}
}
for(ll i = 1;i<N;i++) cnt2[i] += cnt2[i-1];
for(ll i = 0;i<N;i++) cnt[str[i]-'a'] += cnt2[i];
for(int i = 0;i<26;i++) printf("%d ",cnt[i]);
puts("");
}
int main(){
cin>>T;
while(T--){
scanf("%lld %lld",&N,&M);
memset(cnt,0,sizeof cnt);
memset(cnt2,0,sizeof(int)*N+10);
memset(pos,0,sizeof(int)*N+10);
scanf("%s",str);
int tmp;
for(ll i = 1;i<=M;i++){
scanf("%d",&tmp);
pos[tmp-1] +=1;
}
fun();
}
return 0;
}
格力公司福利 279人发布