답안 #1044671

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1044671 2024-08-05T12:11:30 Z beaconmc The Potion of Great Power (CEOI20_potion) C++14
100 / 100
2624 ms 99748 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;
    basic_string<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::__cxx11::basic_string<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::__cxx11::basic_string<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 3 ms 10072 KB Output is correct
4 Correct 9 ms 10888 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 242 ms 48472 KB Output is correct
2 Correct 223 ms 48436 KB Output is correct
3 Correct 245 ms 19536 KB Output is correct
4 Correct 1372 ms 72388 KB Output is correct
5 Correct 509 ms 38144 KB Output is correct
6 Correct 2445 ms 99748 KB Output is correct
7 Correct 618 ms 39248 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 214 ms 48208 KB Output is correct
2 Correct 1937 ms 96180 KB Output is correct
3 Correct 1301 ms 65872 KB Output is correct
4 Correct 2247 ms 99224 KB Output is correct
5 Correct 427 ms 51560 KB Output is correct
6 Correct 2527 ms 99408 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 30 ms 12120 KB Output is correct
2 Correct 137 ms 10328 KB Output is correct
3 Correct 230 ms 10328 KB Output is correct
4 Correct 765 ms 12632 KB Output is correct
5 Correct 729 ms 12964 KB Output is correct
6 Correct 120 ms 11096 KB Output is correct
7 Correct 631 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 3 ms 10072 KB Output is correct
5 Correct 9 ms 10888 KB Output is correct
6 Correct 242 ms 48472 KB Output is correct
7 Correct 223 ms 48436 KB Output is correct
8 Correct 245 ms 19536 KB Output is correct
9 Correct 1372 ms 72388 KB Output is correct
10 Correct 509 ms 38144 KB Output is correct
11 Correct 2445 ms 99748 KB Output is correct
12 Correct 618 ms 39248 KB Output is correct
13 Correct 214 ms 48208 KB Output is correct
14 Correct 1937 ms 96180 KB Output is correct
15 Correct 1301 ms 65872 KB Output is correct
16 Correct 2247 ms 99224 KB Output is correct
17 Correct 427 ms 51560 KB Output is correct
18 Correct 2527 ms 99408 KB Output is correct
19 Correct 30 ms 12120 KB Output is correct
20 Correct 137 ms 10328 KB Output is correct
21 Correct 230 ms 10328 KB Output is correct
22 Correct 765 ms 12632 KB Output is correct
23 Correct 729 ms 12964 KB Output is correct
24 Correct 120 ms 11096 KB Output is correct
25 Correct 631 ms 11352 KB Output is correct
26 Correct 752 ms 44676 KB Output is correct
27 Correct 1341 ms 66092 KB Output is correct
28 Correct 1404 ms 69712 KB Output is correct
29 Correct 1255 ms 72500 KB Output is correct
30 Correct 2624 ms 99604 KB Output is correct
31 Correct 2033 ms 99016 KB Output is correct
32 Correct 2392 ms 99492 KB Output is correct