[标题党请注意] 我是男♂的,刚学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 Rbu_nas @ 2018-07-15 21:56:21

男的啊,走了走了


by strangers @ 2018-07-15 22:02:08

男的啊,走了走了


by ttklwxx @ 2018-07-15 22:03:25

男的啊,走了走了


by Parabola @ 2018-07-15 22:04:38

各位别走啊,我虽然是男的,我的老婆们是女的啊233


by xhhkwy @ 2018-07-15 22:09:35

男的啊,走了走了


by 权御天下 @ 2018-07-15 22:10:47

男的啊,还是有老婆的啊,走了走了


by 小粉兔 @ 2018-07-15 22:12:02

男的啊,走了走了

老婆给几个考虑一下留着


by Parabola @ 2018-07-15 22:14:24

誓死保卫纸片人!(来了这么多dalao全跑了hhh)


by tocek_shiki @ 2018-07-15 22:35:52

男的啊,走了走了,我老公比你强多了


by GNAQ @ 2018-07-15 22:37:13

debug是自己的事情 别人没有义务帮你,也不会在考场上帮你。

实在不行,重构也是方法之一。


| 下一页