• 又联考了一场,感觉自己好菜啊,T1没写出来,后来花了一个早上调试。QAQ。最后发现是个-1还有取模没打。。。TAT。。。难受极了!!!


     

    简单的区间(interval)

    题目描述:

    1508393780639191011.png

    样例输入:

    样例1:
    4 3
    1 2 3 4
    
    样例2:
    4 2
    4 4 7 4
    

    样例输出:

    样例1:
    3
    
    样例2:
    6
    

    提示:

    1508393828908586555.png

    时间限制:1000ms
    空间限制:512MByte

    之前写了一个的代码

    #include<bits/stdc++.h>
    #define maxn 1001000
    #define ll long long
    using namespace std;
    
    ll n,k,a[maxn],s[maxn],cun[maxn],ans;
    vector <ll> up[maxn],down[maxn];
    
    void update(ll l,ll r,ll val)
    {
        if(!r) return; 
        up[max((ll)0 , l)].push_back(val);
        down[max((ll)0 , r)].push_back(val);
    }
    
    void find(ll l,ll r)
    {
        if(l >= r) return;
        ll ma = 0,pos;
        for(ll i=l;i<=r;i++)
        {
            if(a[i] > ma)
            {
                ma = a[i];
                pos = i;
            }
        }
        
        find(l,pos - 1);
        find(pos + 1,r);
        if(pos - l <= r - pos)//求右边 
        {
            update(pos + 1,r,(s[pos - 1] + ma) % k);
            for(ll i=l;i<pos;i++)
            {
                ll val = (s[i - 1] + ma) % k;
                update(pos,r,val);
            }
        }
        else//求左边 
        {
            update(l-1,pos - 2,(s[pos] - ma % k + k) % k);
            for(ll i=pos + 1;i<=r;i++)
            {
                ll val = (s[i] - ma % k + k) % k;
                update(l-1,pos-1,val);
            }
        }
    }
    
    void query()
    {
        for(ll i=0;i<=n;i++)
        {    
            for(ll j=0;j<up[i].size();j++)
                cun[up[i][j]]++;
            ans += cun[s[i]];
            for(ll j=0;j<down[i].size();j++)
                cun[down[i][j]]--;
        }
    }
    
    int main(){
        scanf("%lld%lld",&n,&k);
        for(ll i=1;i<=n;i++)
        {
            scanf("%lld",&a[i]);
            s[i] = (s[i - 1] + a[i]) % k;
        }    
        find(1,n);
        query();
        printf("%lld",ans);
    }

    结果惨遭卡常!!!

    TAT____

    然后卡卡常数就过了。。。

    //#pragma GCC optimize(2)
    #include<bits/stdc++.h>
    #define maxn 1001000
    #define ll long long
    #define R register
    using namespace std;
    
    ll n,k,a[maxn],s[maxn],cun[maxn],ans;
    vector <ll> up[maxn],down[maxn];
    
    inline void update(ll l,ll r,ll val)
    {
        if(!r) return; 
        up[max((ll)0 , l)].push_back(val);
        down[r].push_back(val);
    }
    
    inline void find(ll l,ll r)
    {
        if(l >= r) return;
        ll ma = 0,pos;
        for(R ll i=l;i<=r;++i)
        {
            if(a[i] > ma)
            {
                ma = a[i];
                pos = i;
            }
        }
        find(l,pos - 1);
        find(pos + 1,r);
        if(pos - l <= r - pos)//求右边 
        {
            update(pos + 1,r,(s[pos - 1] + ma) % k);
            for(R ll i=l;i<pos;++i)
            {
                ll val = (s[i - 1] + ma) % k;
                update(pos,r,val);
            }
        }
        else//求左边 
        {
            update(l-1,pos - 2,(s[pos] - ma % k + k) % k);//就是这里,TM%没有打!!! TM-1没有打!!! 
            for(R ll i=pos + 1;i<=r;++i)
            {
                ll val = (s[i] - ma % k + k) % k;//同上 
                update(l-1,pos-1,val);//同上 
            }
        }
    }
    
    inline void query()
    {
        for(R ll i=0;i<=n;++i)
        {    
            for(R ll j=0;j<up[i].size();++j)
                ++cun[up[i][j]];
            ans += cun[s[i]];
            for(R ll j=0;j<down[i].size();++j)
                --cun[down[i][j]];
        }
    }
    
    int main(){
        scanf("%lld%lld",&n,&k);
        for(R ll i=1;i<=n;++i)
        {
            scanf("%lld",&a[i]);
            s[i] = (s[i - 1] + a[i]) % k;
        }    
        find(1,n);
        query();
        printf("%lld",ans);
    }

     还是跑过了。。。但是难受啊,一个早上啊!!!QAQ!!!

  • 相关阅读:
    [译]git reflog
    [译]git rebase -i
    [译]git rebase
    [译]git commit --amend
    [译]git clean
    [译]git reset
    [译]git revert
    [译]git checkout
    [译]git log
    [译]git status
  • 原文地址:https://www.cnblogs.com/kczno1fans/p/7715682.html
Copyright © 2020-2023  润新知