답안 #986638

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
986638 2024-05-21T00:30:53 Z vjudge1 The Potion of Great Power (CEOI20_potion) C++17
49 / 100
1749 ms 222424 KB
#include<bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std;
int SSZ=20;
vector<pair<int,int>>C[100100];
map<int,set<int>> temps[100100], prooc[100100];
set<int>cur[100100];
int h[100100],ord[100100],rev[100100],CC;
void init(int N, int D, int H[]) {
    vector<int>v;
    for(int i=0;i<N;i++) h[i]=H[i],
        v.push_back(i),temps[i][-1];
    sort(v.begin(),v.end(),[](int a,int b){return h[a]<h[b];});
    for(int i=0;i<N;i++)
        rev[ord[v[i]]=i]=v[i];
}
void curseChanges(int U, int A[], int B[]) {
    for(int i=0;i<U;i++){
        A[i]=ord[A[i]];
        B[i]=ord[B[i]];
        if(cur[A[i]].count(B[i]))
            cur[A[i]].erase(B[i]),
            cur[B[i]].erase(A[i]);
        else cur[A[i]].insert(B[i]),
            cur[B[i]].insert(A[i]);
        C[A[i]].push_back({i,B[i]});
        C[B[i]].push_back({i,A[i]});
        if(C[A[i]].size()%SSZ==0)
            temps[A[i]][i]=cur[A[i]];
        if(C[B[i]].size()%SSZ==0)
            temps[B[i]][i]=cur[B[i]];
    }
    for(auto&i:cur)
        i.clear();
}
int calc(vector<int>A,vector<int>B){
    int l=0,r=0,ans=1e9;
    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;
}
int question(int x, int y, int v) {
    x=ord[x],y=ord[y];
    vector<int>A,B;
    auto it=--temps[x].lower_bound(v);
    set<int>X;
    swap(X,it->second);
    auto it2=lower_bound(C[x].begin(),C[x].end(),make_pair(it->first+1,0));
    int I=it2-C[x].begin(),begI=I;
    for(;I<C[x].size()&&C[x][I].first<v;I++)
        if(X.count(C[x][I].second))
            X.erase(C[x][I].second);
        else X.insert(C[x][I].second);
    for(auto i:X)A.push_back(h[rev[i]]);
    while(--I>=begI)if(X.count(C[x][I].second))
        X.erase(C[x][I].second);
    else X.insert(C[x][I].second);
    swap(X,it->second);
    it=--temps[y].upper_bound(v);
    swap(X,it->second);
    it2=lower_bound(C[y].begin(),C[y].end(),make_pair(it->first+1,0));
    I=it2-C[y].begin(),begI=I;
    for(;I<C[y].size()&&C[y][I].first<v;I++)
        if(X.count(C[y][I].second))
            X.erase(C[y][I].second);
        else X.insert(C[y][I].second);
    for(auto i:X)B.push_back(h[rev[i]]);
    while(--I>=begI)if(X.count(C[y][I].second))
        X.erase(C[y][I].second);
    else X.insert(C[y][I].second);
    swap(X,it->second);
    return calc(A,B);
}

Compilation message

potion.cpp: In function 'int calc(std::vector<int>, std::vector<int>)':
potion.cpp:38:12: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   38 |     while(l<A.size()&&r<B.size()){
      |           ~^~~~~~~~~
potion.cpp:38:24: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   38 |     while(l<A.size()&&r<B.size()){
      |                       ~^~~~~~~~~
potion.cpp: In function 'int question(int, int, int)':
potion.cpp:53:11: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   53 |     for(;I<C[x].size()&&C[x][I].first<v;I++)
      |          ~^~~~~~~~~~~~
potion.cpp:66:11: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   66 |     for(;I<C[y].size()&&C[y][I].first<v;I++)
      |          ~^~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 17752 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 18008 KB Output is correct
2 Correct 5 ms 18008 KB Output is correct
3 Correct 5 ms 18008 KB Output is correct
4 Correct 29 ms 28112 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 308 ms 54948 KB Output is correct
2 Correct 350 ms 54576 KB Output is correct
3 Correct 291 ms 43692 KB Output is correct
4 Correct 1079 ms 153044 KB Output is correct
5 Correct 573 ms 64988 KB Output is correct
6 Correct 1496 ms 208712 KB Output is correct
7 Correct 508 ms 57972 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 304 ms 54444 KB Output is correct
2 Correct 1506 ms 222424 KB Output is correct
3 Correct 1018 ms 124856 KB Output is correct
4 Correct 1700 ms 208096 KB Output is correct
5 Correct 455 ms 64608 KB Output is correct
6 Correct 1749 ms 208752 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 45 ms 20312 KB Output is correct
2 Incorrect 31 ms 19748 KB Incorrect
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 17752 KB Output is correct
2 Correct 6 ms 18008 KB Output is correct
3 Correct 5 ms 18008 KB Output is correct
4 Correct 5 ms 18008 KB Output is correct
5 Correct 29 ms 28112 KB Output is correct
6 Correct 308 ms 54948 KB Output is correct
7 Correct 350 ms 54576 KB Output is correct
8 Correct 291 ms 43692 KB Output is correct
9 Correct 1079 ms 153044 KB Output is correct
10 Correct 573 ms 64988 KB Output is correct
11 Correct 1496 ms 208712 KB Output is correct
12 Correct 508 ms 57972 KB Output is correct
13 Correct 304 ms 54444 KB Output is correct
14 Correct 1506 ms 222424 KB Output is correct
15 Correct 1018 ms 124856 KB Output is correct
16 Correct 1700 ms 208096 KB Output is correct
17 Correct 455 ms 64608 KB Output is correct
18 Correct 1749 ms 208752 KB Output is correct
19 Correct 45 ms 20312 KB Output is correct
20 Incorrect 31 ms 19748 KB Incorrect
21 Halted 0 ms 0 KB -