Submission #1231033

#TimeUsernameProblemLanguageResultExecution timeMemory
1231033poatThe Potion of Great Power (CEOI20_potion)C++17
0 / 100
28 ms13804 KiB
#include<bits/stdc++.h>
// #include "grader.cpp"
using namespace std;

const int N = 2e5 + 100, C = 500;

int n, D, H[N];
int U, A[N], B[N];

vector<int> vec[10][10];
set<int> S[N];


void init(int NN, int DD, int HH[]) 
{
    n = NN;
    D = DD;
    for(int i = 0; i < n; i++)
        H[i] = HH[i];
}
    
    
void curseChanges(int u, int AA[], int BB[]) 
{    
    for(int i = 0; i < u; i++)
    {
        A[i + 1] = AA[i];
        B[i + 1] = BB[i];
    }
    U = u;


    for(int i = 1; i <= u; i++)
    {
        int a = A[i], b = B[i];
        if(S[a].find(b) != S[a].end())
        {
            S[a].erase(b);
            S[b].erase(a);
        }
        else
        {
            S[a].insert(b);
            S[b].insert(a);
        }

        if(i % C == 0)
        {
            int ind = i / C;
            for(int j = 0; j < n; j++)
            {
                for(auto h : S[j])  
                    vec[ind][j].push_back(h);
            }
        }
    }

    // for(int i = 1; i <= 3; i++)
    // {
    //     cout << i << " == \n";
    //     for(int j = 0; j < n; j++)
    //     {
    //         cout << j << " == ";
    //         for(auto h : vec[i][j])
    //             cout << h << ' ';
    //         cout << '\n';
    //     }
    //     cout << '\n';
    // }
    // exit(0);
}

set<int> S1, S2;
vector<int> V1, V2;
int question(int x, int y, int v) 
{
    S1.clear();
    S2.clear();
    V1.clear();
    V2.clear();

    int ind = (v / C);

    for(auto i : vec[ind][x])
        S1.insert(i);
    for(auto i : vec[ind][y])
        S2.insert(i);

    ind *= C;

    for(int i = ind + 1; i <= v; i++)
    {
        if(A[i] == x || B[i] == x)
        {
            int k = (A[i] == x ? B[i] : A[i]);
            if(S1.find(k) != S1.end())
                S1.erase(k);
            else
                S1.insert(k);
        }
        if(A[i] == y || B[i] == y)
        {
            int k = (A[i] == y ? B[i] : A[i]);
            if(S2.find(k) != S2.end())
                S2.erase(k);
            else
                S2.insert(k);
        }
    }


    for(auto i : S1)
        V1.push_back(H[i]);
    for(auto i : S2)
        V2.push_back(H[i]);

    int res = 1e9;
    for(auto i : V1)
    {
        ind = lower_bound(V2.begin(), V2.end(), i) - V2.begin();
        if(ind != V2.size())
            res = min(res, V2[ind] - i);
        if(ind)
            res = min(res, i - V2[ind - 1]);
    }

    return res;      
}   
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...