답안 #74475

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
74475 2018-09-02T07:06:20 Z gs18115 조개 줍기 (KOI17_shell) C++14
46 / 100
388 ms 128956 KB
#include<iostream>
using namespace std;
typedef long long LL;
const LL MAXN=1510;
const LL n=2048;
LL FT[n+10][n+10];
void FI(const LL&i,LL j,const LL&dif)
{
    if(i==0||j==0)
        return;
    for(;j<=n;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;
LL sx,ex,sy,ey;
LL flag;
bool 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++)
    {
        for(j=1;j<=N;j++)
        {
            S[j]=N+1;
            E[j]=0;
        }
        cin>>C>>X>>Y;
        ch=C=='U'?1LL:-1LL;
        arr[X][Y]+=ch;
        sx=ex=X;
        sy=ey=Y;
        S[X]=E[X]=Y;
        flag=N;
        flag1=flag2=true;
        while(ex<=N&&(flag1||flag2))
        {
            if(flag1)
            {
                if(sy<N)
                {
                    FS(sx,sy,t1);
                    FS(sx+1,sy,t2);
                    FS(sx+1,sy-1,t3);
                    if(t2!=max(t1+ch,t3)+arr[sx+1][sy])
                        S[++sx]=sy;
                    else if(sx!=ex)
                        sy++;
                    else
                    {
                        FS(sx,sy+1,t2);
                        FS(sx-1,sy+1,t3);
                        if(t2!=max(t1+ch,t3)+arr[sx][sy+1])
                            sy++;
                        else
                        {
                            flag=sx;
                            flag1=false;
                        }
                    }
                }
                else
                {
                    FS(sx,N,t1);
                    FS(sx+1,N,t2);
                    FS(sx+1,N-1,t3);
                    if(t2!=max(t1+ch,t3)+arr[sx+1][sy])
                        S[++sx]=sy;
                    else
                    {
                        flag=sx;
                        flag1=false;
                    }
                }
            }
            if(flag2)
            {
                if(ey<N)
                {
                    FS(ex,ey,t1);
                    FS(ex,ey+1,t2);
                    FS(ex-1,ey+1,t3);
                    if(t2!=max(t1+ch,t3)+arr[ex][ey+1])
                        ey++;
                    else
                    {
                        E[ex]=ey;
                        if(ey>S[ex+1])
                            ex++;
                        else
                        {
                            FS(ex+1,ey,t2);
                            FS(ex+1,ey-1,t3);
                            if(t2!=max(t1+ch,t3)+arr[ex+1][ey])
                                ex++;
                            else
                                flag2=false;
                        }
                    }
                }
                else
                {
                    E[ex]=ey;
                    if(ey>S[ex+1])
                        ex++;
                    else
                    {
                        FS(ex+1,ey,t2);
                        FS(ex+1,ey-1,t3);
                        if(t2!=max(t1+ch,t3)+arr[ex+1][ey])
                            ex++;
                        else
                            flag2=false;
                    }
                }
            }
            S[sx]=min(S[sx],sy);
            E[ex]=ey;
        }
        for(j=X;j<=flag;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;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 2552 KB Output is correct
2 Correct 5 ms 2560 KB Output is correct
3 Correct 5 ms 2648 KB Output is correct
4 Correct 6 ms 2796 KB Output is correct
5 Correct 6 ms 2796 KB Output is correct
6 Correct 6 ms 2796 KB Output is correct
7 Correct 5 ms 2796 KB Output is correct
8 Correct 5 ms 2796 KB Output is correct
9 Correct 5 ms 2796 KB Output is correct
10 Correct 6 ms 2884 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 240 ms 60280 KB Output is correct
2 Correct 240 ms 60288 KB Output is correct
3 Correct 276 ms 60288 KB Output is correct
4 Correct 230 ms 60288 KB Output is correct
5 Correct 223 ms 60288 KB Output is correct
6 Correct 242 ms 60288 KB Output is correct
7 Correct 234 ms 60288 KB Output is correct
8 Correct 225 ms 60292 KB Output is correct
9 Correct 225 ms 60316 KB Output is correct
10 Correct 224 ms 60384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 2552 KB Output is correct
2 Correct 5 ms 2560 KB Output is correct
3 Correct 5 ms 2648 KB Output is correct
4 Correct 6 ms 2796 KB Output is correct
5 Correct 6 ms 2796 KB Output is correct
6 Correct 6 ms 2796 KB Output is correct
7 Correct 5 ms 2796 KB Output is correct
8 Correct 5 ms 2796 KB Output is correct
9 Correct 5 ms 2796 KB Output is correct
10 Correct 240 ms 60280 KB Output is correct
11 Correct 240 ms 60288 KB Output is correct
12 Correct 276 ms 60288 KB Output is correct
13 Correct 230 ms 60288 KB Output is correct
14 Correct 223 ms 60288 KB Output is correct
15 Correct 242 ms 60288 KB Output is correct
16 Correct 234 ms 60288 KB Output is correct
17 Correct 225 ms 60292 KB Output is correct
18 Correct 225 ms 60316 KB Output is correct
19 Correct 224 ms 60384 KB Output is correct
20 Correct 302 ms 60384 KB Output is correct
21 Runtime error 388 ms 128956 KB Execution killed with signal 11 (could be triggered by violating memory limits)
22 Halted 0 ms 0 KB -