zoukankan      html  css  js  c++  java
  • 树线段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
    树和线段
    ---------------------------------

  • 相关阅读:
    [转载]SELinux 环境下网络服务设置,配置 Apache 、Samba、NFS
    [转载]SELinux安全系统基础
    Linux NFS服务器的安装与配置
    将可执行程序设为linux服务启动
    不关闭selinux下配置php+httpd访问KingbaseES
    [转载]SELinux安全系统基础
    解决samba和SELINUX 冲突
    [转载]在线文本编辑器的基本实现原理
    [转载]使用postgresql安装wordpress
    [转载]php连接postgreSQL数据库及其操作(php5,postgreSQL9)
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3105041.html
Copyright © 2011-2022 走看看