Submission #1224659

#TimeUsernameProblemLanguageResultExecution timeMemory
1224659asli_bgCircle Passing (EGOI24_circlepassing)C++20
100 / 100
289 ms51500 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long

#define fi first
#define se second
#define pb push_back
#define sp <<' '<<

#define FOR(i,a) for(int i=0;i<(a);i++)
#define FORE(i,a,b) for(int i=(a);i<(b);i++)

#define cont(x) for(auto el:x) cout<<el<<endl;
#define contp(x) for(auto el:x) cout<<el.fi<<'-'<<el.se<<' ';cout<<endl;
#define DEBUG(x) cout<<#x sp x<<endl;

#define mid (l+r)/2

typedef vector<int> vi;
typedef pair<int,int> pii;
typedef vector<pii> vii;
typedef vector<bool> vb;

signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);

    int n,m,q;
    cin>>n>>m>>q;

    vi aa(m);

    set<int> s1;

    FOR(i,m){
        cin>>aa[i];
        s1.insert(aa[i]);
        s1.insert(aa[i]+n);
    }

    while(q--){
        int x,y;
        cin>>x>>y;
        if(x>y) swap(x,y);
        //x küçük olan, y büyük olan

        int ans=min(y-x,2*n-(y-x));

        int bir,iki;
        bool ff=false;

        if(s1.count(x)){
            int deg=1;
            if(x<n) {bir=x;iki=x+n;}
            else {bir=x;iki=x-n;}
            deg+=min(abs(bir-x),2*n-abs(bir-x));
            deg+=min(abs(iki-y),2*n-abs(iki-y));
            ans=min(ans,deg);

            ff=true;
            s1.erase(bir); s1.erase(iki);
        }

        if(!s1.empty()){
            auto it=s1.upper_bound(x);
            if(it==s1.end()) it=s1.begin();
            if(it!=s1.end()){
                int deg=1;
                int temp;
                if(*it<n) temp=*it+n;
                else temp=*it-n;
                deg+=min(abs(*it-x),2*n-abs(*it-x));
                deg+=min(abs(temp-y),2*n-abs(temp-y));
                ans=min(ans,deg);
            }

            if(it==s1.begin())it=s1.end();
            if(it!=s1.begin()){
                it--;
                int deg=1;
                int temp;
                if(*it<n) temp=*it+n;
                else temp=*it-n;
                deg+=min(abs(*it-x),2*n-abs(*it-x));
                deg+=min(abs(temp-y),2*n-abs(temp-y));
                ans=min(ans,deg);
            }
        }

        if(ff){
            s1.insert(bir);
            s1.insert(iki);
        }

        cout<<ans<<endl;
    }
}
#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...