Thắc mắc lỗi Out Of Bound

Đề: https://codeforces.com/edu/course/2/lesson/9/2/practice/contest/307093/problem/E
Em check trong môi trường dev-c++ hay code-block nó đều đúng test 1 nhưng khi nộp vô đây nó lại sai đáp án, và bị kêu lỗi OUT OF BOUND ở dòng 24:

 	count[arr[le]]--;

Em thấy thắc mắc vì em đặt 2 tham số là int rồi đủ qua giới hạn của bài mà nó vẫn bị lỗi out of bound. Mọi người giúp em với ạ, em cảm ơn.

#include <iostream>
#include <map>
#include <vector>
using namespace std;
int main () {
    int n;
    cin >> n;
    int k;
    cin >> k;
    vector <int> arr (n);
    for (int i = 0; i < n;i++) {
       cin >> arr[i];
	}
	map <int, int> count;
	int le = 0;
	long long ans = 0;
	long long sum = 0;
	int num;
     for (int ri = 0; ri < n;ri++) {
        sum+= arr[ri];
        count[arr[ri]]++;
		if (count[arr[ri]] == 1) num++;
        while (num > k) {
        	count[arr[le]]--;
        	if (count[arr[le]] == 0) num--;
        	le++;
		}
		ans += ri-le+1;
	 }
	cout << ans;
}
1 Like

muốn debug lỗi thì print từng dòng ra, thường kiểu lỗi này là bị offset by one hoặc lỗi corner case. Nghĩa là mảng có n phần tử thôi, mà chơi le++ riết nó thành arr[n] thì out of bound.
ps: Đây là dự đoán dựa vào chém gió nha. Vì tết nên lười debug lắm. Gud luck.

6 Likes

Ok cảm ơn anh :D, ăn tết zui zẻ

3 Likes

Out of Bound là lỗi thực thi, truy xuất phần tử ngoài mảng. Có thể do trình biên dịch trên CodeForce rà soát kĩ các lỗi nghiêm trọng như thế.
Bạn kiểm tra xem biến le có lúc nào >= nkhông? Đó là lúc lỗi Out of Bound.

4 Likes

Dạ vâng em sửa được r ạ, e cảm ơn. :smiley:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?