树线段hdu 4508 美素数(线段树)

本文探讨了如何利用线段树处理大量数据,高效地求解美素数问题。通过实例演示,强调了合理选择数据结构的重要性。同时,文章结合每日一道理,提醒读者珍惜时间,鼓励青少年在学习生活中自主努力。

本文朋友在青岛吃饭的时候突然想到的...近期就有想写几篇关于树线段的博客,所以回家到之后就奋笔疾书的写出来发布了

    当前解题呈文都加上题目。

    数据量比较大,感觉暴力的话会超时,所以用线段树处理。

    逐一求出美素数,然后将美素数存入线段树中。。。。不知道该说啥了,模板级线段树。。。。。

    每日一道理
最为值得珍惜的是今天,因为最容易流逝的就是今天,把握今天就是把握希望,分分秒秒只是瞬间,而所乘载的分分秒秒就叫做一天,时间的流逝往往是在不经意之间,人生几回,青春更珍贵,对于我们这个年龄的青少年来说,青春已不足二十载,在学习的生活中我们必须靠自己的力量,驾驭着自己的小船驶向希望的彼岸。
#include<stdio.h>
#include<string.h>
#define N 1000005
int a[N];
struct node
{
	int x,y;
	int count;
}s[N*3];
void CreatTree(int t,int x,int y)
{
	s[t].count=0;
	s[t].x=x;
	s[t].y=y;
	if(s[t].x==s[t].y)
		return ;
	int temp=t*2;
	int mid=(x+y)/2;
	CreatTree(temp,x,mid);
	CreatTree(temp+1,mid+1,y);
	return ;
}
void InsertTree(int t,int x)
{
	if(s[t].x==s[t].y&&s[t].x==x)
	{
		s[t].count++;
		return ;
	}
	int temp=t*2;
	int mid=(s[t].x+s[t].y)/2;
	if(x>mid)
		InsertTree(temp+1,x);
	else
		InsertTree(temp,x);
	s[t].count=s[temp].count+s[temp+1].count;
	return ;
}
int FindTree(int t,int x,int y)
{
	if(s[t].x==x&&s[t].y==y)
		return s[t].count;
	int mid=(s[t].x+s[t].y)/2;
	int temp=t*2;
	int sum=0;
	if(x>mid)
		sum+=FindTree(temp+1,x,y);
	else if(y<=mid)
		sum+=FindTree(temp,x,y);
	else
	{
		sum+=FindTree(temp,x,mid);
		sum+=FindTree(temp+1,mid+1,y);
	}
	return sum;
}
int fun(int x)
{
	int sum;
	sum=0;
	while(x)
	{
		sum+=x%10;
		x/=10;
	}
	return sum;
}
int main()
{
	int T;
	int i,j;
	memset(a,0,sizeof(a));
	a[0]=a[1]=1;
	CreatTree(1,1,1000000);
	for(i=2;i<=1000000;i++)
	{
		if(a[i]==0)
		{
			if(a[fun(i)]==0)
				InsertTree(1,i);
			for(j=i*2;j<=1000000;j+=i)
				a[j]++;
		}
	}
	int m,n;
	int count;
	count=1;
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d%d",&m,&n);
		printf("Case #%d: %d\n",count++,FindTree(1,m,n));
	}
	return 0;
}

    

文章结束给大家分享下程序员的一些笑话语录: 据说有一位软件工程师,一位硬件工程师和一位项目经理同坐车参加研讨会。不幸在从盘山公路下山时坏在半路上了。于是两位工程师和一位经理就如何修车的问题展开了讨论。
硬件工程师说:“我可以用随身携带的瑞士军刀把车坏的部分拆下来,找出原因,排除故障。”
项目经理说:“根据经营管理学,应该召开会议,根据问题现状写出需求报告,制订计划,编写日程安排,逐步逼近,alpha测试,beta1测试和beta2测试解决问题。”
软件工程说:“咱们还是应该把车推回山顶再开下来,看看问题是否重复发生。”

--------------------------------- 原创文章 By
树和线段
---------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值