博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线段树模板
阅读量:6910 次
发布时间:2019-06-27

本文共 1502 字,大约阅读时间需要 5 分钟。

//logn时间查找任意一段数的新信息

#include<stdio.h>

#include<stdlib.h>
typedef struct node{
int l,r;
int good;
struct node *Ln,*Rn;
}*Linklist,Lnode;
int nice;
int max(int a,int b){ if(a>b)return a; else return b;}
void creat(Linklist list)
{
Linklist p,q;
int h=(list->l+list->r)/2;
if(list->r-list->l==0)
{ list->Ln=NULL;list->Rn =NULL;return; }
p=(Linklist)malloc(sizeof(Lnode));
p->l=list->l ; p->r =h; list->Ln =p; creat(list->Ln );
q=(Linklist)malloc(sizeof(Lnode));
q->l=h+1; q->r=list->r; list->Rn =q; creat(list->Rn );
}
void insert(int rand ,int message,Linklist list)
{
if(list->l==rand&&list->r==rand)
    {list->good=message; return;}
else if(rand<=(list->l+list->r)/2) insert(rand,message,list->Ln );
else                         insert(rand,message,list->Rn );
}
int tongji(Linklist list)
{
if(list->l==list->r )return list->good ;
else list->good =max(tongji(list->Ln),tongji(list->Rn));
return list->good ;
}
int find(int a,int b,Linklist list)
{
int h=(list->l +list->r)/2;
if(list->l==a&&list->r ==b) {nice=list->good;return list->good;}
if(b<=h&&a>=list->l ) find(a , b, list->Ln );
else if(a>h&&b<=list->r ) find(a,b,list->Rn );
else if(a>=list->l&&a<=h&&b<=list->r&&b>h)
     return nice=max(find(a,h,list->Ln ),find(h+1,b,list->Rn ));
return nice;
}
main()
{
int i,a,n,x,y;
Linklist head;
head=(Linklist)malloc(sizeof(node));
head->l=1;
scanf("%d",&n);
head->r=n; creat(head);

for(i=0;i<n;i++)

{
   scanf("%d",&a);
   insert(i+1,a,head);
}
tongji(head);
while(scanf("%d%d",&x,&y))
{
   a=find(x,y,head);
   printf("%d\n",a);
}
return 0;
}

转载地址:http://hvycl.baihongyu.com/

你可能感兴趣的文章
[PHP] 网盘搜索引擎-采集爬取百度网盘分享文件实现网盘搜索(二)
查看>>
二叉堆
查看>>
Java中的Enum的继承
查看>>
[Android]RecyclerView的简单演示样例
查看>>
怎样在Java中运行Hive命令或HiveQL
查看>>
使用enca进行字符集转码
查看>>
Ubuntu下安装Oracle JRE运行环境
查看>>
docker 标记和推送镜像
查看>>
Mapreduce实战:序列化与反序列化 int,int[],string[][]
查看>>
可执行文件格式elf和bin
查看>>
Android中获取当前位置的使用步骤
查看>>
CEF中JavaScript与C++交互
查看>>
unity3d绘画手册-------灯光之反射及各个参数解释
查看>>
深入理解程序的结构
查看>>
POJ1365 Prime Land【质因数分解】【素数】【水题】
查看>>
Java实现文件复制
查看>>
Spark修炼之道(基础篇)——Linux大数据开发基础:第三节:用户和组
查看>>
Linux下Power Management开发总结
查看>>
安装服务器安全狗教程
查看>>
使用CodePush实时更新 React Native 和 Cordova 应用
查看>>