本文朋友在青岛吃饭的时候突然想到的...近期就有想写几篇关于树线段的博客,所以回家到之后就奋笔疾书的写出来发布了
当前解题呈文都加上题目。
数据量比较大,感觉暴力的话会超时,所以用线段树处理。
逐一求出美素数,然后将美素数存入线段树中。。。。不知道该说啥了,模板级线段树。。。。。
每日一道理
最为值得珍惜的是今天,因为最容易流逝的就是今天,把握今天就是把握希望,分分秒秒只是瞬间,而所乘载的分分秒秒就叫做一天,时间的流逝往往是在不经意之间,人生几回,青春更珍贵,对于我们这个年龄的青少年来说,青春已不足二十载,在学习的生活中我们必须靠自己的力量,驾驭着自己的小船驶向希望的彼岸。
最为值得珍惜的是今天,因为最容易流逝的就是今天,把握今天就是把握希望,分分秒秒只是瞬间,而所乘载的分分秒秒就叫做一天,时间的流逝往往是在不经意之间,人生几回,青春更珍贵,对于我们这个年龄的青少年来说,青春已不足二十载,在学习的生活中我们必须靠自己的力量,驾驭着自己的小船驶向希望的彼岸。
#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
树和线段
---------------------------------