Submission #74458

# Submission time Handle Problem Language Result Execution time Memory
74458 2018-09-02T05:58:54 Z gs18115 None (KOI17_shell) C++14
0 / 100
217 ms 53636 KB
#include<iostream>
using namespace std;
typedef long long LL;
const LL MAXN=1510;
const LL n=2048;
LL FT[MAXN][MAXN];
void FI(const LL&i,LL j,const LL&dif)
{
    if(i==0||j==0)
        return;
    for(;j<MAXN;j+=j&-j)
        FT[i][j]+=dif;
    return;
}
void FS(const LL&i,LL j,LL&SC)
{
    SC=0;
    if(i==0||j==0)
        return;
    for(;j>0;j=j&(j-1))
        SC+=FT[i][j];
    return;
}
LL arr[MAXN][MAXN];
LL dp[MAXN][MAXN];
LL S[MAXN],E[MAXN];
char C;
LL ch;
LL A,B;
LL N;
LL i,j;
LL X,Y,x,y;
LL flag1,flag2;
LL ans;
LL t1,t2,t3;
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cin>>N;
    for(i=1;i<=N;i++)
        for(j=1;j<=N;j++)
            cin>>arr[i][j];
    for(i=1;i<=N;i++)
    {
        for(j=1;j<=N;j++)
        {
            dp[i][j]=arr[i][j]+max(dp[i-1][j],dp[i][j-1]);
            FI(i,j,dp[i][j]-dp[i][j-1]);
            ans+=dp[i][j];
        }
    }
    cout<<ans<<endl;
    for(i=0;i<N;i++)
    {
        cin>>C>>X>>Y;
        ch=C=='U'?1LL:-1LL;
        arr[X][Y]+=ch;
        x=X;
        y=Y;
        S[x]=y;
        flag1=flag2=N;
        while(x<N)
        {
            if(y<N)
            {
                FS(x,y,t1);
                FS(x+1,y,t2);
                FS(x+1,y-1,t3);
                if(t2!=max(t1+ch,t3)+arr[x+1][y])
                    S[++x]=y;
                else
                {
                    FS(x,y+1,t2);
                    FS(x-1,y+1,t3);
                    if(t2!=max(t1+ch,t3)+arr[x][y+1])
                        y++;
                    else
                    {
                        flag1=x;
                        break;
                    }
                }
            }
            else
            {
                FS(x,N,t1);
                FS(x+1,N,t2);
                FS(x+1,N-1,t3);
                if(t2!=max(t1+ch,t3)+arr[x+1][y])
                    S[++x]=y;
                else
                {
                    flag1=x;
                    break;
                }
            }
        }
        x=X;
        y=Y;
        while(x<=N)
        {
            if(y<N)
            {
                FS(x,y,t1);
                FS(x,y+1,t2);
                FS(x-1,y+1,t3);
                if(t2!=max(t1+ch,t3)+arr[x][y+1])
                    y++;
                else
                {
                    E[x]=y;
                    FS(x+1,y,t2);
                    FS(x+1,y-1,t3);
                    if(t2!=max(t1+ch,t3)+arr[x+1][y])
                        x++;
                    else
                    {
                        flag2=x;
                        break;
                    }
                }
            }
            else
            {
                E[x]=y;
                E[x]=y;
                FS(x+1,y,t2);
                FS(x+1,y-1,t3);
                if(t2!=max(t1+ch,t3)+arr[x+1][y])
                    x++;
                else
                {
                    flag2=x;
                    break;
                }
            }
        }
        if(flag1==flag2)
            E[MAXN<<1]=-1;
        for(j=X;j<=flag1;j++)
        {
            ans+=ch*(E[j]-S[j]+1);
            FI(j,S[j],ch);
            FI(j,E[j]+1,-ch);
        }
        cout<<ans<<'\n';
    }
    cout<<endl;
    return 0;
}

Compilation message

shell.cpp: In function 'int main()':
shell.cpp:140:22: warning: array subscript is above array bounds [-Warray-bounds]
             E[MAXN<<1]=-1;
             ~~~~~~~~~^
# Verdict Execution time Memory Grader output
1 Incorrect 5 ms 2552 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 217 ms 53636 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 5 ms 2552 KB Output isn't correct
2 Halted 0 ms 0 KB -