CF1234题解

CF1234A

简单题,求一下平均数,因为他好像不能有小数,所以向上取整即可

CF1234B

这道题还分B1,B2,我一下直接全过了

维护一个长度为k的队列,直接照着它模拟

然后用map(因为有负数)来判断这个数是否在队列中即可

CF1234C

你会发现每种水管因为可以旋转,所以只分两种情况,1,2是一种情况,3,4,5,6是另一种

然后因为只有两行,所以只会有唯一的路径到达

然后按照情况分类讨论判断是否能到达即可

CF1234D

树状数组一眼题

分别对每一个小写字母开一个树状数组,单点修改,区间查询即可

代码没调出来,不知道哪里有错了,真服了。

有没有大佬能帮我看一看QWQ

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int q,op,p,l,r,len;
int a[N];
char s[N],c,tr[40][N];
int lowbit(int x){
	return x&(-x);
}
void add(int x,int z,int num){
	for(;x<=N;x+=lowbit(x)){
		tr[z][x]+=num;
	}
}
int query(int x,int z){
	int res=0;
	for(;x;x-=lowbit(x)){
		res+=tr[z][x];
	}
	return res;
}
int main(){
	scanf("%s",s+1);
	len=strlen(s+1);
	for(int i=1;i<=len;i++){
		a[i]=s[i]-'a'+1;
		add(i,a[i],1);
	}
	scanf("%d",&q);
	for(int i=1;i<=q;i++){
		scanf("%d",&op);
		if(op==1){
			scanf("%d %c",&p,&c);
			add(p,a[p],-1);
			a[p]=c-'a'+1;
			add(p,a[p],1);
		}
		else{
			int ans=0;
			scanf("%d%d",&l,&r);
			for(int i=1;i<=26;i++){
				if((query(r,i)-query(l-1,i))!=0){
					ans++;
				}
			}
			printf("%d\n",ans);
		}
	}
}
posted @ 2024-11-08 14:40  daydreamer_zcxnb  阅读(55)  评论(0编辑  收藏  举报