zoukankan      html  css  js  c++  java
  • 5月月赛(* ̄︿ ̄)

    啊啊啊啊啊我讨厌月赛


    第一题:30分

    很裸的快速幂,结果考的时候成功的把(k={10^{10^{9}}})看成了(k^{10^9}),脑子一抽以为可以用long long
    然后就完美的溢出+(color {red}{WA}了)
    其实即使看到了我也不会,我忘记了怎么打快速幂了_(:з」∠)_
    神奇的快速幂

    第二题:20分

    20分,我记得我是只写了lis的基本,没写改编得的_(:з」∠)_
    我很完美的想到了0的位置完全可以算出前后的大小差距,然后看能用差距补多少个0
    然后我不会了
    (color {lightblue}{艹})
    后来看std,凑这不是我的想法吗
    (huge {完了}),果然是我太蔡了,正解我都想出来了我居然不会写
    我觉得挺好的一篇关于lower_bound的解释

    第三题

    区间查询,第一时间反应就是线段树(啊啊啊啊std就是线段树然而最可怕的是我忘记线段树了我曾经会的啊啊啊)
    那.....我贴个我曾经的(color {blue}{线段树})模板在这里好了_(:з」∠)_

    #include<iostream>
    #include<cstring>
    
    #define lson (o<<1)
    #define rson ((o<<1)|1)
    
    typedef long long ll;
    
    using namespace std;
    struct node{
        ll sum;
        ll lazyTag;
    }t[400010];
    ll n,m;
    ll a[400010];
    
    /*void build(int o,int l,int r);
    void pushUp(int o);
    void pushDown(int o,int l,int r);
    void modify(int o,int l,int r,int ql,int qr,int k);
    void update(int l,int r,int ql,int qr,int k);
    void f(int o,int l,int r,int k);
    int query(int o,int l,int r,int ql,int qr);*/
    void f(ll o,ll l,ll r,ll k)
    {
        t[o].lazyTag+=k;
        t[o].sum+=k*(r-l+1);
    }
    void pushUp(ll o)
    {
        t[o].sum=t[lson].sum+t[rson].sum;//sum
    //    cout<<o<<" "<<t[o].sum<<endl;
    }
    
    void pushDown(ll o,ll l,ll r)
    {
        ll mid=(l+r)>>1;
    
        f(lson,l,mid,t[o].lazyTag);//左
        f(rson,mid+1,r,t[o].lazyTag);//右
    
        t[o].lazyTag=0;//标记清零
    }
    
    void build(ll o,ll l,ll r)
    {
        if(l==r)
        {
            t[o].sum=a[l];
            return;
        }
        ll mid=(l+r)>>1;
        build(lson,l,mid);
        build(rson,mid+1,r);
        pushUp(o);
    }
    
    
    void modify(ll o,ll l,ll r,ll ql,ll qr,ll k)
    {
        if(ql<=l&&r<=qr)//如果在区间内
        {
            f(o,l,r,k);
            return;
        }
        pushDown(o,l,r);
        ll mid=(l+r)>>1;
        if(ql<=mid)
            modify(lson,l,mid,ql,qr,k);
        if(mid<qr)
            modify(rson,mid+1,r,ql,qr,k);
        pushUp(o);
    }
    
    
    
    ll query(ll o,ll l,ll r,ll ql,ll qr)
    {
        ll res=0;
        if(ql<=l&&r<=qr)
            return t[o].sum;
        ll mid=(l+r)>>1;
        pushDown(o,l,r);
        if(ql<=mid)
            res+=query(lson,l,mid,ql,qr);
        if(mid<qr)
            res+=query(rson,mid+1,r,ql,qr);
        return res;
    }
    
    int main()
    {
        cin>>n;
        cin>>m;
        for(int i=1;i<=n;i++)
        {
            cin>>a[i];
        }
        int t;
        ll x,y,k;
        build(1,1,n);
        for(int i=1;i<=m;i++)
        {
            cin>>t;
            switch(t)
            {
                case 1:
                    cin>>x>>y>>k;
                    modify(1,1,n,x,y,k);
                    break;
    
                case 2:
                    cin>>x>>y;
                    cout<<query(1,1,n,x,y)<<endl;
                    break;
    
            }
        }
        return 0;
    }
    
    

    (huge {真的完了})

  • 相关阅读:
    《Mathematical Olympiad——组合数学》——染色问题
    《啊哈算法》——栈、队列、链表
    《Mathematical Olympiad——组合数学》——抽屉原理
    2749: [HAOI2012]外星人
    bzoj4241: 历史研究
    bzoj3210: 花神的浇花集会
    bzoj4998: 星球联盟
    bzoj2728: [HNOI2012]与非
    bzoj2669: [cqoi2012]局部极小值
    bzoj5441: [Ceoi2018]Cloud computing
  • 原文地址:https://www.cnblogs.com/ComputerEngine/p/10907126.html
Copyright © 2011-2022 走看看