高维标记

ll md(ll x)
{
    if(0<=x)
    {
        if(x<mod)return x;
        if(x<(mod<<1))return x-mod;
        return x%mod;
    }
    if(x<=-mod)x%=mod;
    return x+mod;
}

struct Matrix
{
    static const int n=3;
    int a[n+1][n+1];
    int* operator[](int x){return a[x];}

    Matrix& operator=(const Matrix &b)//赋值
    {
        for(int i=1;i<=n;++i)
            for(int j=1;j<=n;++j)
                a[i][j]=md(b.a[i][j]);
        return *this;
    }

    Matrix operator*(const Matrix &b)const//矩阵乘法
    {
        Matrix c;c.clear();
        for(int i=1;i<=n;++i)
            for(int k=1;k<=n;++k)//Cache
                for(int j=1;j<=n;++j)
                    c.a[i][j]=md(c.a[i][j]+md(1ll*a[i][k]*b.a[k][j]));
        return c;
    }

    Matrix operator+(const Matrix &b)const//矩阵加法
    {
        Matrix c;c.clear();
        for(int i=1;i<=n;++i)
            for(int j=1;j<=n;++j)
                c.a[i][j]=md(a[i][j]+b.a[i][j]);
        return c;
    }

    void print()
    {
        for(int i=1;i<=n;++i)
            for(int j=1;j<=n;++j)
                pf("%d%c",a[i][j]," \n"[j==n]);
    }

    void clear()
    {
        for(int i=1;i<=n;++i)
            for(int j=1;j<=n;++j)
                a[i][j]=0;
    }
}m[__],sm[__];
//m[i]=pow(M,i),sm[i]=sm[i-1]+m[i];

struct Vector
{
    static const int n=Matrix::n;
    int a[n+1];

    int& operator[](int x){return a[x];}

    Vector& operator=(const Vector &b)//赋值
    {
        for(int i=1;i<=n;++i)
            a[i]=md(b.a[i]);
        return *this;
    }

    Vector operator*(const Matrix &b)const//向量乘矩阵
    {
        Vector c;c.clear();
        for(int j=1;j<=n;++j)
            for(int i=1;i<=n;++i)//Cache
                c.a[i]=md(c.a[i]+md(1ll*a[j]*b.a[j][i]));
        return c;
    }

    Vector& operator+=(const Vector &b)//向量加法
    {
        for(int i=1;i<=n;++i)
            a[i]=md(a[i]+b.a[i]);
        return *this;
    }

    bool empty()
    {
        for(int i=1;i<=n;++i)
            if(a[i])return false;
        return true;
    }

    void clear() {for(int i=1;i<=n;++i)a[i]=0;}
};

//f[i]=a*f[i-1]+b*f[i-2];       (a 1)
//(f[i],f[i-1])=(f[i-1],f[i-2])*(b 0)
void init(int ___,Vector x)//系数向量{0,f[i-1],f[i-2],……f[i-n]}
{
    const int n=Matrix::n;
    Matrix M;//系数阵
    for(int i=1;i<=n;++i)
    {
        M[i][1]=md(x[i]);
        for(int j=2;j<=n;++j)
            if(j==i+1)M[i][j]=1;
            else M[i][j]=0;
    }

    //单位阵
    for(int i=1;i<=n;++i)
        for(int j=1;j<=n;++j)
            if(i==j)m[0][i][j]=sm[0][i][j]=1;
            else m[0][i][j]=sm[0][i][j]=0;

    for(int i=1;i<=___;++i)
    {
        m[i]=m[i-1]*M;
        sm[i]=sm[i-1]+m[i];
    }
}

int a[__];

struct SegmentTree
{
    Vector val;int n,ql,qr;
    struct node
    {
        int val;Vector ad;

        void putadd(int tl,int tr,Vector v)
        {
            ad+=v;
            Vector x=v*sm[tr-tl];
            val=md(val+x[Matrix::n]);
        }

        void clear(){val=0;ad.clear();}
    }t[__<<2];

    void pushup(int x)
    {
        t[x].val=md(t[x<<1].val+t[x<<1|1].val);
    }

    void build(int _n){n=_n;build(1,1,n);}

    void build(int x,int tl,int tr)
    {
        t[x].clear();
        if(tl==tr){t[x].val=a[tl];return;}
        int tm=(tl+tr)>>1;
        build(x<<1,tl,tm);
        build(x<<1|1,tm+1,tr);
        pushup(x);
    }

    void pushdown(int x,int tl,int tm,int tr)
    {
        if(!t[x].ad.empty())
        {
            t[x<<1].putadd(tl,tm,t[x].ad);
            t[x<<1|1].putadd(tm+1,tr,t[x].ad*m[tm+1-tl]);
            t[x].ad.clear();
        }
    }

    void add(int _ql,int _qr,Vector _val)//{f[n],f[n-1],……,f[1]}
    {
        ql=_ql,qr=_qr,val=_val;
        _add(1,1,n);
    }

    void _add(int x,int tl,int tr)
    {
        if(ql>tr || qr<tl)return;
        if(ql<=tl && tr<=qr)
        {
            t[x].putadd(tl,tr,val*m[tl-ql]);
            return;
        }
        int tm=(tl+tr)>>1;
        pushdown(x,tl,tm,tr);
        _add(x<<1,tl,tm);
        _add(x<<1|1,tm+1,tr);
        pushup(x);
    }

    int get_val(int _ql,int _qr)
    {
        ql=_ql,qr=_qr;
        return _get_val(1,1,n);
    }

    int _get_val(int x,int tl,int tr)
    {
        if(ql>tr || qr<tl)return 0;
        if(ql<=tl && tr<=qr)return t[x].val;
        int res=0,tm=(tl+tr)>>1;
        pushdown(x,tl,tm,tr);
        res=md(_get_val(x<<1,tl,tm)+_get_val(x<<1|1,tm+1,tr));
        pushup(x);
        return res;
    }
}T;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
东南亚位于我国倡导推进的“一带一路”海陆交汇地带,作为当今全球发展最为迅速的地区之一,近年来区域内生产总值实现了显著且稳定的增长。根据东盟主要经济体公布的最新数据,印度尼西亚2023年国内生产总值(GDP)增长5.05%;越南2023年经济增长5.05%;马来西亚2023年经济增速为3.7%;泰国2023年经济增长1.9%;新加坡2023年经济增长1.1%;柬埔寨2023年经济增速预计为5.6%。 东盟国家在“一带一路”沿线国家中的总体GDP经济规模、贸易总额与国外直接投资均为最大,因此有着举足轻重的地位和作用。当前,东盟与中国已互相成为双方最大的交易伙伴。中国-东盟贸易总额已从2013年的443亿元增长至 2023年合计超逾6.4万亿元,占中国外贸总值的15.4%。在过去20余年中,东盟国家不断在全球多变的格局里面临挑战并寻求机遇。2023东盟国家主要经济体受到国内消费、国外投资、货币政策、旅游业复苏、和大宗商品出口价企稳等方面的提振,经济显现出稳步增长态势和强韧性的潜能。 本调研报告旨在深度挖掘东南亚市场的增长潜力与发展机会,分析东南亚市场竞争态势、销售模式、客户偏好、整体市场营商环境,为国内企业出海开展业务提供客观参考意见。 本文核心内容: 市场空间:全球行业市场空间、东南亚市场发展空间。 竞争态势:全球份额,东南亚市场企业份额。 销售模式:东南亚市场销售模式、本地代理商 客户情况:东南亚本地客户及偏好分析 营商环境:东南亚营商环境分析 本文纳入的企业包括国外及印尼本土企业,以及相关上下游企业等,部分名单 QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。邮箱:market@qyresearch.com

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值