HDU4027Can you answer these queries? (线段树)

题目大意:给出一串数字,两种操作:每次给出一个区间,将区间内的数字全部开根号;区间内的数字求和。

不用区间更新,每次只用单点更新即可,判断区间长度是否等于区间和,如果是就不再更新了,这样相当于每次开根号的时候是将不是全一的区间做了单点更新,其实复杂度并不高。

代码如下:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <algorithm>
using namespace std;
const int N=1000005;
long long int tree[N*4];
long long int num[N];
long long int ans=0;

void build(int l,int r,int i)
{
    if(l==r)
    {
        tree[i]=num[l];
        return ;
    }
    int mid=(l+r)/2;
    build(l,mid,i*2);
    build(mid+1,r,i*2+1);
    tree[i]=tree[i*2+1]+tree[i*2];
}

void updata(int l,int r,int L,int R,int i)
{
    //printf("%d\n",i);
    if(tree[i]==(r-l+1))
        return ;
    if(l==r)
    {
        tree[i]=sqrt(tree[i]);
        return ;
    }
    int mid=(l+r)/2;
    if(L<=mid)
        updata(l,mid,L,R,i*2);
    if(R>mid)
        updata(mid+1,r,L,R,i*2+1);

    tree[i]=tree[i*2+1]+tree[i*2];
}

void query(int l,int r,int L,int R,int i)
{
    if(l>=L&&r<=R)
    {
        ans+=tree[i];
        return ;
    }
    int mid=(l+r)/2;
    if(L<=mid)
        query(l,mid,L,R,i*2);
    if(R>mid)
        query(mid+1,r,L,R,i*2+1);
}
int main()
{
    int n;
    int ca=1;
    while(scanf("%d",&n)!=EOF)
    {
        for(int i=1;i<=n;i++)
            scanf("%lld",&num[i]);
        build(1,n,1);
        int q;
        scanf("%d",&q);
        printf("Case #%d:\n",ca++);
        while(q--)
        {
            int sym,l,r;
            scanf("%d %d %d",&sym,&l,&r);
            if(l>r)
                swap(l,r);

            if(sym==0)
            {
                updata(1,n,l,r,1);
            }
            if(sym==1)
            {
                ans=0;
                query(1,n,l,r,1);
                printf("%lld\n",ans);
            }
        }
        printf("\n");
    }
    return 0;
}


基于MMSkeleton工具包中的ST-GCN模型实现一种基于动态拓扑图的人体骨架动作识别算法python源码+使用说明.zip 改进ST-GCN模型的骨架拓扑图构建部分,使用持续学习思想动态构建人体骨架拓扑图. 将具有多关系特性的人体骨架序列数据重新编码为关系三元组, 并基于长短期记忆网络, 通过解耦合的方式学习特征嵌入. 当处理新骨架关系三元组时, 使用部分更新机制 动态构建人体骨架拓扑图, 将拓扑图送入ST-GCN进行动作识别。 运行MMSKeleton工具包参考[GETTING_STARTED.md](./doc/GETTING_STARTED.md) - 单独使用ST-GCN模型进行人体动作识别参考[START_RECOGNITION.md](./doc/START_RECOGNITION.md) - 训练基于动态拓扑图的人体骨架动作识别算法 ``` shell cd DTG-SHR python ./mmskeleton/fewrel/test_lifelong_model.py ``` - 测试基于动态拓扑图的人体骨架动作识别算法 ``` shell cd DTG-SHR python ./mmskeleton/fewrel/train_lifelong_model.py ``` - 可视化算法运行结果 基于web server搭建前端 [[参考]](https://blog.csdn.net/gzq0723/article/details/113488110) 1、前端模块:包含 'static与'templates'文件夹为界面展示相关的代码。 templates里面包含了两个html的结构文档,用来定义浏览器的显示界面。 static里面的css和img用来修饰界面。 2、服务模块: servel.py里面是web服务的一个业务逻辑。 运行算法性能可视化web服务 ``` shell cd DTG-SHR python ./server.py ``` 【备注】 1、该资源内项目代码百分百可运行,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值