79752024-01-12 09:35:07ZsBalazsRendezéscpp17Hibás válasz 7/40119ms12212 KiB
#include <bits/stdc++.h>
using namespace std;

int main() {
    long long n, m;
    cin >> n >> m;
    
    vector<long long> szamok;
    
    for (long long i = 0; n > i; i++) {
        long long temp;
        cin >> temp;
        
        szamok.push_back(temp);
    }
    
    vector<pair<long long, long long>> inter;
    
    for (long long i = 0; m > i; i++) {
        long long a, b;
        cin >> a >> b;
        
        a--;
        b--;
        
        inter.push_back({a, b});
    }
    
    sort(inter.begin(), inter.end());
    
    vector<pair<long long, long long>> realInter;
    
    long long currentStart = -1;
    long long currentEnd = -1;
    
    for (long long i = 0; m > i; i++) {
        pair<long long, long long> current = inter[i];
        
        if (currentStart == -1) {
            currentStart = current.first;
            currentEnd = current.second;
        } else if (currentEnd >= current.first) {
            // Ez egybeesik
            currentEnd = current.second;
        } else {
            realInter.push_back({currentStart, currentEnd});
            
            currentStart = current.first;
            currentEnd = current.second;
        }
    }
    
    if (currentStart != -1) {
        realInter.push_back({currentStart, currentEnd});
    }
    
    long long megoldas = 0;
    
    for (auto curr : realInter) {
        long long start = curr.first;
        long long end = curr.second;
        
        vector<long long> subInter;
        
        for (long long i = start; end >= i; i++) {
            subInter.push_back(szamok[i]);
        }
        
        sort(subInter.begin(), subInter.end());
        
        for (long long i = 0; subInter.size() > i; i++) {
            if (subInter[i] == start+i+1) {
                megoldas++;
            }
        }
    }
    
    long long lastIndex = 0;
    for (auto curr : realInter) {
        for (long long i = lastIndex; n > i && curr.first > i; i++) {
            if (i+1 == szamok[i]) {
                megoldas++;
            }
        }
        
        lastIndex = curr.second+1;
    }

    for (long long i = lastIndex; n > i; i++) {
        if (szamok[i] == i+1) {
            megoldas++;
        }
    }
    
    cout << megoldas << endl;
    
	return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base7/40
1Elfogadva0/03ms1812 KiB
2Hibás válasz0/017ms3300 KiB
3Elfogadva2/23ms2088 KiB
4Hibás válasz0/23ms2220 KiB
5Hibás válasz0/23ms2488 KiB
6Hibás válasz0/23ms2664 KiB
7Hibás válasz0/24ms2832 KiB
8Hibás válasz0/24ms3060 KiB
9Hibás válasz0/23ms2984 KiB
10Hibás válasz0/23ms2984 KiB
11Hibás válasz0/2119ms11244 KiB
12Elfogadva2/2119ms11808 KiB
13Elfogadva2/2119ms12044 KiB
14Elfogadva1/1119ms12080 KiB
15Hibás válasz0/2119ms12212 KiB
16Hibás válasz0/2118ms9796 KiB
17Hibás válasz0/2116ms9788 KiB
18Hibás válasz0/2116ms9616 KiB
19Hibás válasz0/2116ms9608 KiB
20Hibás válasz0/1115ms9532 KiB
21Hibás válasz0/2115ms9756 KiB
22Hibás válasz0/2115ms10084 KiB
23Hibás válasz0/2116ms10100 KiB