Submission #3008632


Source Code Expand

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <string>
#include <sstream>
#include <complex>
#include <vector>
#include <list>
#include <queue>
#include <deque>
#include <stack>
#include <map>
#include <set>
using namespace std;
typedef long long unsigned int ll;

#define EPS (1e-7)
#define INF (1e9)
#define PI (acos(-1))

bool comp(pair<int, int> in1, pair<int, int> in2)
{
    if(in1.second < in2.second){
        return true;
    } else {
        return false;
    }
}

int main() {
    //cout.precision(10);
    int n, m;
    cin >> n >> m;
    int a[100100];
    for(int i = 1; i <= n; i++){
        cin >> a[i];
    }
    vector<pair<int, int> > c, b;
    for(int i = 1; i <= n - 1; i++){
        pair<int, int> in;
        in.first = a[i];
        if(a[i] > a[i + 1]){
            in.second = a[i + 1] + m;
        } else {
            in.second = a[i + 1];
        }
        b.push_back(in);
        c.push_back(in);
    }
    sort(b.begin(), b.end());
    sort(c.begin(), c.end(), comp);
    /*for(int i = 0; i < n - 1; i++){
        cout << b[i].first << " " << b[i].second << endl;
    }
    for(int i = 0; i < n - 1; i++){
        cout << c[i].first << " " << c[i].second << endl;
    }*/
    int minus[100100];
    for(int i = 0; i <= m; i++){
        minus[i] = 0;
    }
    int contain = 0;
    for(int i = 0; i < n - 1; i++){
        if((b[i].first <= (m + 1 - 2)) && (b[i].second >= (m + 1))){
            contain++;
            minus[1] += m - b[i].first;
        }
    }
    //cout << minus[1] << endl;
    for(int i = 2; i <= m; i++){
        int ok = n - 2;
        int ng = -1;
        while(ok - ng > 1){
            int mid = (ok + ng) / 2;
            if(b[mid].first >= (i - 2)){
                ok = mid;
            } else {
                ng = mid;
            }
        }
        while(b[ok].first == (i - 2)){
            contain++;
            ok++;
            if(ok > n - 2){
                break;
            }
        }
        ok = n - 2;
        ng = -1;
        while(ok - ng > 1){
            int mid = (ok + ng) / 2;
            if(c[mid].second >= (i - 1)){
                ok = mid;
            } else {
                ng = mid;
            }
        }
        while(c[ok].second == (i - 1)){
            contain--;
            minus[i] -= (c[ok].second - c[ok].first - 1);
            ok++;
            if(ok > n - 2){
                break;
            }
        }
        ok = n - 2;
        ng = -1;
        while(ok - ng > 1){
            int mid = (ok + ng) / 2;
            if(c[mid].second >= (i - 1 + m)){
                ok = mid;
            } else {
                ng = mid;
            }
        }
        while(c[ok].second == (i - 1 + m)){
            contain--;
            minus[i] -= (c[ok].second - c[ok].first - 1);
            ok++;
            if(ok > n - 2){
                break;
            }
        }
        minus[i] += minus[i - 1] + contain;
        //cout << i << " " << contain << " " << minus[i] << endl;
    }
    int sum = 0;
    for(int i = 0; i < n - 1; i++){
        sum += b[i].second - b[i].first;
    }
    int minimum = minus[1];
    for(int i = 2; i <= m; i++){
        minimum = max(minimum, minus[i]);
    }
    cout << sum - minimum << endl;
    /*for(int i = 1; i <= m; i++){
        cout << minus[i] << endl;
    }*/
    return 0;
}

Submission Info

Submission Time
Task C - pushpush
User kort0n
Language C++14 (GCC 5.4.1)
Score 0
Code Size 3533 Byte
Status RE
Exec Time 224 ms
Memory 4332 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 300
Status
WA × 3
RE × 1
WA × 3
RE × 9
Set Name Test Cases
Sample sample1.txt, sample2.txt, sample3.txt, sample4.txt
All even_0.txt, even_1.txt, even_2.txt, even_3.txt, odd_0.txt, odd_1.txt, odd_2.txt, odd_3.txt, sample1.txt, sample2.txt, sample3.txt, sample4.txt
Case Name Status Exec Time Memory
even_0.txt RE 212 ms 4332 KB
even_1.txt RE 220 ms 4332 KB
even_2.txt RE 213 ms 4332 KB
even_3.txt RE 224 ms 4332 KB
odd_0.txt RE 212 ms 4332 KB
odd_1.txt RE 212 ms 4332 KB
odd_2.txt RE 212 ms 4332 KB
odd_3.txt RE 213 ms 4332 KB
sample1.txt WA 1 ms 256 KB
sample2.txt WA 1 ms 256 KB
sample3.txt RE 96 ms 640 KB
sample4.txt WA 1 ms 256 KB