답안 #969269

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
969269 2024-04-24T21:00:28 Z tset The Potion of Great Power (CEOI20_potion) C++14
38 / 100
1209 ms 262144 KB
#include<bits/stdc++.h>

using namespace std;

#define pii pair<int, int>
const int INF = 1e9;

int nbElem, nbVoisinsMax, nbDays;
vector<int > alti;
int SQRTDAY;
vector<set<int > > save[1000];
vector<set<int > > voisins;
vector<int > Us, Vs;
void init(int N, int D, int F[])
{
    nbElem = N;
    nbVoisinsMax = D;
    alti.resize(N);
    for(int i=0; i<SQRTDAY *2; i++)
    {
        save[i].resize(N);
    }
    voisins.resize(N);
    for(int i=0; i< N; i++)
    {
        alti[i] = F[i];
    }
}

void curseChanges(int U, int A[], int B[])
{
    nbDays = U;
    SQRTDAY = sqrt(U);
    for(int iDay = 0; iDay < nbDays; iDay++)
    {
        if(iDay%SQRTDAY == 0)
        {
            save[iDay/SQRTDAY] = voisins;
        }
        int u = A[iDay];
        int v = B[iDay];
        if(voisins[u].find(v) != voisins[u].end())
        {
            voisins[u].erase(v);
            voisins[v].erase(u);
        }
        else
        {
            voisins[u].insert(v);
            voisins[v].insert(u);
        }
        Us.push_back(A[iDay]);
        Vs.push_back(B[iDay]);
    }
}

int question(int X, int Y, int V)
{
    V--;
    int day = V;
    set<int> vx, vy;
    int backupDate = day/SQRTDAY;
    vx = save[backupDate][X];
    vy = save[backupDate][Y];
    for(int dayRecover = backupDate*SQRTDAY; dayRecover<= day; dayRecover++)
    {
        int u = Us[dayRecover];
        int v = Vs[dayRecover];
        if(u == X)
        {
            if(vx.find(v) != vx.end())

                vx.erase(v);
            else
                vx.insert(v);
        }
        if(v == X)
        {
            if(vx.find(u) != vx.end())
                vx.erase(u);
            else
                vx.insert(u);
        }

        if(u == Y)
        {
            if(vy.find(v) != vy.end())
                vy.erase(v);
            else
                vy.insert(v);
        }
        if(v == Y)
        {
            if(vy.find(u) != vy.end())
                vy.erase(u);
            else
                vy.insert(u);
        }
        
    }
    int ans = INF;
    vector<pii > altis;
    for(int valX : vx)
    {
        altis.push_back({alti[valX], 0});
    }
    for(int valY: vy)
    {
        altis.push_back({alti[valY], 1});
    }
    sort(altis.begin(), altis.end());
    vector<int> lasts(2, -INF);
    for(pii altiAct : altis)
    {
        lasts[altiAct.second] =  altiAct.first;
        ans=  min(ans, abs(lasts[0] - lasts[1]));
    }
    if(ans == INF)
        return 1000000000;
    return ans;

}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 500 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 3668 KB Output is correct
2 Correct 5 ms 3672 KB Output is correct
3 Correct 5 ms 3672 KB Output is correct
4 Correct 129 ms 162608 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Runtime error 160 ms 262144 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 164 ms 262144 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 139 ms 95916 KB Output is correct
2 Correct 120 ms 52788 KB Output is correct
3 Correct 290 ms 49336 KB Output is correct
4 Correct 1170 ms 76872 KB Output is correct
5 Correct 1209 ms 89372 KB Output is correct
6 Correct 199 ms 51536 KB Output is correct
7 Correct 945 ms 55136 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 500 KB Output is correct
2 Correct 5 ms 3668 KB Output is correct
3 Correct 5 ms 3672 KB Output is correct
4 Correct 5 ms 3672 KB Output is correct
5 Correct 129 ms 162608 KB Output is correct
6 Runtime error 160 ms 262144 KB Execution killed with signal 9
7 Halted 0 ms 0 KB -