답안 #1044590

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1044590 2024-08-05T11:23:34 Z beaconmc The Potion of Great Power (CEOI20_potion) C++14
100 / 100
2597 ms 100100 KB
#include <bits/stdc++.h>
 
typedef int ll;
#define FOR(i,x,y) for(ll i=x; i<y; i++)
#define FORNEG(i,x,y) for(ll i=x; i>y; i--)
 
using namespace std;
 
 
 
ll h[100001];
struct cmp {
    bool operator() (ll a, ll b) const {
        if (h[a] == h[b]) return a<b;
        return h[a] < h[b];
    }
};

vector<array<ll,2>> changes[100001];
vector<set<ll, cmp>> lotchange[100001];
 
void init(int N, int D, int H[]) {
    FOR(i,0,N) h[i] = H[i];
}
 
void curseChanges(int U, int A[], int B[]) {
    vector<set<ll, cmp>> tempedges;
    tempedges.resize(100001);
    FOR(i,0,U){



        if (tempedges[A[i]].find(B[i]) != tempedges[A[i]].end()){
            changes[A[i]].push_back({i, B[i]});
            tempedges[A[i]].erase(B[i]);
        }
        else{
            changes[A[i]].push_back({i, B[i]});
            tempedges[A[i]].insert(B[i]);
        }

        if (tempedges[B[i]].find(A[i]) != tempedges[B[i]].end()){
            changes[B[i]].push_back({i, A[i]});
            tempedges[B[i]].erase(A[i]);
        } 
        else{
            changes[B[i]].push_back({i, A[i]});
            tempedges[B[i]].insert(A[i]);
        }
        if ((changes[A[i]].size()-1)%50==0){
            lotchange[A[i]].push_back(tempedges[A[i]]);
        }
        if ((changes[B[i]].size()-1)%50==0){
            lotchange[B[i]].push_back(tempedges[B[i]]);
        }


    }
}
 
int mindiff(set<ll, cmp>&a, set<ll, cmp>&b){

 
    ll ans = 1000000000;
    vector<ll> A,B;
 
    for (auto&i : a) A.push_back(h[i]);
    for (auto&i : b) B.push_back(h[i]);
 

    ll l=0,r=0;
    while (l<A.size() && r<B.size()){
        ans = min(ans, abs(A[l] - B[r]));
        if (A[l] < B[r]) l++;
        else r++;
    }
    return ans;
 
    return ans;
}
 
int question(int x, int y, int v) {

    v--;
    ll ans = 1000000000;


    ll pos = upper_bound(changes[x].begin(), changes[x].end(), array<ll, 2>{v, 1000000000})-changes[x].begin();
    pos--;
    

    set<ll, cmp> X;
    if (pos >= 0){
        X=lotchange[x][pos/50];

        FOR(i, (pos/50)*50+1, pos+1){

            ll temp = changes[x][i][1];

            if (X.find(temp) != X.end()) X.erase(temp);
            else X.insert(temp);

        }
    }


    pos = upper_bound(changes[y].begin(), changes[y].end(), array<ll, 2>{v, 1000000000})-changes[y].begin();
    pos--;
    

    set<ll, cmp> Y;
    if (pos >= 0){
        Y=lotchange[y][pos/50];

        FOR(i, (pos/50)*50+1, pos+1){

            ll temp = changes[y][i][1];

            if (Y.find(temp) != Y.end()) Y.erase(temp);
            else Y.insert(temp);

        }
    }






    return mindiff(X,Y);
}













Compilation message

potion.cpp: In function 'int mindiff(std::set<int, cmp>&, std::set<int, cmp>&)':
potion.cpp:72:13: warning: comparison of integer expressions of different signedness: 'll' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   72 |     while (l<A.size() && r<B.size()){
      |            ~^~~~~~~~~
potion.cpp:72:27: warning: comparison of integer expressions of different signedness: 'll' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   72 |     while (l<A.size() && r<B.size()){
      |                          ~^~~~~~~~~
potion.cpp: In function 'int question(int, int, int)':
potion.cpp:85:8: warning: unused variable 'ans' [-Wunused-variable]
   85 |     ll ans = 1000000000;
      |        ^~~
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 9816 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 10072 KB Output is correct
2 Correct 3 ms 10072 KB Output is correct
3 Correct 2 ms 10072 KB Output is correct
4 Correct 24 ms 10884 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 227 ms 48216 KB Output is correct
2 Correct 215 ms 48304 KB Output is correct
3 Correct 241 ms 19644 KB Output is correct
4 Correct 1367 ms 72316 KB Output is correct
5 Correct 510 ms 37756 KB Output is correct
6 Correct 2337 ms 99980 KB Output is correct
7 Correct 642 ms 39252 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 197 ms 48260 KB Output is correct
2 Correct 1945 ms 96080 KB Output is correct
3 Correct 1243 ms 65908 KB Output is correct
4 Correct 2287 ms 99152 KB Output is correct
5 Correct 408 ms 51792 KB Output is correct
6 Correct 2574 ms 99296 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 32 ms 12120 KB Output is correct
2 Correct 150 ms 10328 KB Output is correct
3 Correct 235 ms 10328 KB Output is correct
4 Correct 769 ms 12632 KB Output is correct
5 Correct 732 ms 12888 KB Output is correct
6 Correct 128 ms 11096 KB Output is correct
7 Correct 643 ms 11352 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 9816 KB Output is correct
2 Correct 3 ms 10072 KB Output is correct
3 Correct 3 ms 10072 KB Output is correct
4 Correct 2 ms 10072 KB Output is correct
5 Correct 24 ms 10884 KB Output is correct
6 Correct 227 ms 48216 KB Output is correct
7 Correct 215 ms 48304 KB Output is correct
8 Correct 241 ms 19644 KB Output is correct
9 Correct 1367 ms 72316 KB Output is correct
10 Correct 510 ms 37756 KB Output is correct
11 Correct 2337 ms 99980 KB Output is correct
12 Correct 642 ms 39252 KB Output is correct
13 Correct 197 ms 48260 KB Output is correct
14 Correct 1945 ms 96080 KB Output is correct
15 Correct 1243 ms 65908 KB Output is correct
16 Correct 2287 ms 99152 KB Output is correct
17 Correct 408 ms 51792 KB Output is correct
18 Correct 2574 ms 99296 KB Output is correct
19 Correct 32 ms 12120 KB Output is correct
20 Correct 150 ms 10328 KB Output is correct
21 Correct 235 ms 10328 KB Output is correct
22 Correct 769 ms 12632 KB Output is correct
23 Correct 732 ms 12888 KB Output is correct
24 Correct 128 ms 11096 KB Output is correct
25 Correct 643 ms 11352 KB Output is correct
26 Correct 735 ms 44876 KB Output is correct
27 Correct 1347 ms 66156 KB Output is correct
28 Correct 1399 ms 69780 KB Output is correct
29 Correct 1175 ms 72528 KB Output is correct
30 Correct 2597 ms 100100 KB Output is correct
31 Correct 2106 ms 99192 KB Output is correct
32 Correct 2350 ms 99476 KB Output is correct