震惊!O2竟然这么强

P2801 教主的魔法

引领天下 @ 2018-12-01 20:11:28

RT,我打了个分块,原先是这样的:

https://www.luogu.org/record/show?rid=14142181

T了1个点。。。

吸了O2之后:

https://www.luogu.org/record/show?rid=14142930

229msAC……汗……

难道是因为我代码太丑了?

代码:

#include <bits/stdc++.h>
using namespace std;
#define maxn 1000005
int n,m,a[maxn],kuai,num,belong[maxn],atag[1005],l[1005],r[1005];
vector<int> Kuai[1005];
void updata(int x){
    Kuai[x].clear();
    for (int i=l[x];i<=r[x];i++)Kuai[x].push_back(a[i]);
    sort(Kuai[x].begin(),Kuai[x].end());
}
void add(int b,int c,int k){
    for (int i=b;i<=min(r[belong[b]],c);i++)a[i]+=k;
    updata(belong[b]);
    if (belong[b]!=belong[c]){
        for (int i=l[belong[c]];i<=c;i++)a[i]+=k;
        updata(belong[c]);
    }
    for (int i=belong[b]+1;i<belong[c];i++)atag[i]+=k;
}
int query(int b,int c,int k){
    int result=0;
    for (int i=b;i<=min(r[belong[b]],c);i++)if (a[i]+atag[belong[i]]>=k)result++;
    if (belong[b]!=belong[c])for (int i=l[belong[c]];i<=c;i++)if (a[i]+atag[belong[i]]>=k)result++;
    for (int i=belong[b]+1;i<belong[c];i++)result+=Kuai[i].end()-lower_bound(Kuai[i].begin(),Kuai[i].end(),k-atag[i]);
    return result;
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    cin>>n>>m;
    for (int i=1;i<=n;i++)cin>>a[i];
    kuai=sqrt(n);
    num=n/kuai+((n%kuai)>0);
    for (int i=1;i<=n;i++){
        belong[i]=(i-1)/kuai+1;
        Kuai[belong[i]].push_back(a[i]);
    }
    for (int i=1;i<=num;i++){
        sort(Kuai[i].begin(),Kuai[i].end());
        l[i]=(i-1)*kuai+1;
        r[i]=i*kuai;
    }
    r[num]=n;
    while (m--){
        char flag;
        int l,r,w;
        cin>>flag>>l>>r>>w;
        if (flag=='M')add(l,r,w);
        else cout<<query(l,r,w)<<endl;
    }
}

by ddwqwq @ 2018-12-01 20:14:17

@引领天下 不知道为什么,O2对分块的优化特别明显,这种情况我也遇见过好几次


by 引领天下 @ 2018-12-01 20:14:58

@杜岱玮 恐怕是因为我用了STL


by ddwqwq @ 2018-12-01 20:15:56

@引领天下 但我当时没用STL啊。。可能是因为分块单纯的循环比较多


by 引领天下 @ 2018-12-01 20:17:21

@杜岱玮 会不会O2内置了分块啊(大雾


by ddwqwq @ 2018-12-01 20:18:17

QwQ


by Imakf @ 2018-12-01 20:46:34

@引领天下 自带巨大常数


by 水军带你飞 @ 2018-12-01 20:57:29

怕不是测评姬累了


|