[标题党请注意] 我是男♂的,刚学OI不到一年,求大佬帮忙

P2801 教主的魔法

Parabola @ 2018-07-15 21:53:35

恭喜你成功被标题骗了进来,来了就不要走了嘛~

没错又是这个大坏蛋自己debug不出来就算了既然还要别人来帮忙

各位dalao帮忙看看啊分块WA的不行啊

我已经debug了三个小时了啊(逃)

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
using namespace std;
const int MAXN=1000000+5;
const int MAXM=1000+5;
int block[MAXM][MAXM];
long long add[MAXN];
int a[MAXN];
int wj[MAXN];
int b,n,SIZE,m;
inline int read()
{
    char ch;int x=0;
    while(ch < '0' || ch > '9') ch=getchar();
    while(ch >= '0' && ch <= '9')   x=x*10+ch-'0',ch=getchar();
    return x;
}
inline char my_getchar()
{
    char ch;
    while(ch != 'A' && ch != 'M')   ch=getchar();
    return ch;
}
inline void init()
{
    n=read(),m=read();
    SIZE=sqrt(n);
    int j=0;
    for(int i=0;i<n;i++)
    {
        block[b][j]=a[i]=read();
        wj[i]=j;
        if(++j == SIZE)
            ++b,j=0;    
    }
    for(int i=0;i<b;i++)
        sort(block[i],block[i]+SIZE);
    if(j)
        sort(block[b],block[b]+j);
}
inline void modify(int l,int r,int c)
{
    int lb=l/SIZE,rb=r/SIZE;
    if(lb == rb)
    {
        for(int i=l;i<=r;i++)
            a[i]+=c;
    }
    for(int i=(lb+1) * SIZE -1 ; i >= l ; i--)
        a[i]+=c;
    for(int i=rb * SIZE ; i <= r ; i++)
        a[i]+=c;
    for(int i=lb * SIZE ; i <= (lb+1) * SIZE -1 ; i++)
        block[lb][wj[i]]=a[i];
    for(int i=rb * SIZE ; i <= (rb+1) * SIZE -1 ; i++)
        block[rb][wj[i]]=a[i];
    sort(block[lb],block[lb]+SIZE);sort(block[rb],block[rb]+SIZE);
    for(int i=lb+1 ; i < rb ; i++)
        add[i]+=c;
}
inline int query(int l,int r,int c)
{
    int lb=l/SIZE,rb=r/SIZE;
    int tot=0;
    if(lb == rb)
    {
        for(int i=l;i<=r;i++)
            if(a[i] + add[lb] >= c)
                tot++;
        return tot;
    }
    for(int i=(lb+1) * SIZE -1 ; i >= l ; i--)
        if(a[i] + add[lb] >= c)
            tot++;
    for(int i=rb * SIZE ; i <= r ; i++)
        if(a[i] + add[rb] >= c)
            tot++;
    for(int i=lb+1 ; i < rb ; i++)
    {
        int k=lower_bound(block[i],block[i]+SIZE,c-add[i]) -block[i] -1;
        tot+=SIZE-k;
    }
    return tot;
}
int main()
{
    init();
    while(m--)
    {
        char opt=my_getchar();
        if(opt == 'A')
            printf("%d\n",query(read()-1,read()-1,read()));
        else
            modify(read()-1,read()-1,read());
    }
}

by Parabola @ 2018-07-15 22:40:21

@FancyDreams

这。。。dalao说的很有道理啊,我还是靠自己吧。

以后不发求助帖了hhh

谢谢了


by lolte @ 2018-07-16 08:07:46

%%%HFdalao


by 执剑人 @ 2018-07-16 10:59:48

男的啊,还有对象走了走了


by kl膜法59改 @ 2018-07-23 18:57:16

@FancyDreams 您的头像好像酷玩的专辑?我看错了吗?


by kl膜法59改 @ 2018-07-23 19:22:20

@FancyDreams 行吧,我确实看错了,x&y这一专是真的好听


上一页 |