DMOJ · ahscc1p4

Cyclic Sorting

This C++ solution uses data structures for DMOJ ahscc1p4 Cyclic Sorting. Read the reasoning, inspect the code, or try your own test case below.

ahscc1p4Arrays & prefix sumsData structuresC++44 lines
Solution069of 248
Open official problem ↗ Download C++ file ↓ Search the library → Open full Code Lab ↗ Report an issue ↗

Approach

Data structures

Cyclic Sorting asks after point changes for the minimum cyclic shift making the array sorted or -1; the code maintains circular descents.

Arrays & prefix sums

Problem and code

Useful links.

Written by benbenyaojifen. Try the problem first, then compare your approach with the code.

Open official problem ↗View exact source file ↗
Implementation

cyclic_sorting.cpp

C++

    #include <bits/stdc++.h>
     
    using namespace std;
     
    int main(){
        ios::sync_with_stdio(0);
        cin.tie(0);
        int n, q;
        cin >> n >> q;
        vector<int> vec(n);
        for(int i = 0; i < vec.size(); i++){
            cin >> vec[i];
        }
        set<int> decrease;
        auto down = [&](int i) {
            int nxt = (i + 1) % n;
            return vec[i] > vec[nxt];
        };
        for (int i = 0; i < n; i++) {
            if (down(i)) {
                decrease.insert(i);
            }
        }
        for(int i = 0; i < q; i++){
            int index, x;
            cin >> index >> x;
            index--;
            vec[index] = x;
            for(int j = -1; j <= 0; j++){
                int pos = (index + j + n) % n;
                decrease.erase(pos);
                if(down(pos)) decrease.insert(pos);
            }
            if(decrease.size() > 1){
                cout << -1 << '\n';
            } else if(decrease.empty()){
                cout << 0 << '\n';
            } else {
                int ans = *decrease.begin();
                cout << min(ans + 1, n - ans - 1) << '\n';
            }
        }
        return 0;
    }
        

Did this explanation save you time? I'm a Grade 11 student building this free library to make difficult algorithms easier to understand.

Buy me a coffee ↗Keep studying →

Test this problem

Run your code here.

Paste your code, run a test case, compare the output, or trace selected values.

Full trace, comparison & stress testing ↗
StatusReady
Output
No run yet.
Diagnostics
No diagnostics yet.

Each run is isolated and has strict limits. Passing one test does not guarantee the judge will accept the solution.