CSES - Playlist | Danh sách phát

Xem PDF

Điểm: 1200 (p) Thời gian: 1.0s Bộ nhớ: 512M Input: bàn phím Output: màn hình

Cho biết danh sách phát của một đài phát thanh kể từ khi thành lập. Danh sách phát có tổng cộng \(n\) bài hát.

Dãy các bài hát liên tiếp dài nhất, mà mỗi bài trong đó đều độc nhất là dãy nào?

Input

  • Dòng đầu vào đầu tiên chứa một số nguyên \(n\): số lượng bài hát.
  • Dòng tiếp theo có \(n\) số nguyên \(k_1,k_2,\ldots,k_n\): mã số của mỗi bài hát.

Output

  • In độ dài của dãy dài nhất mà mỗi bài hát là duy nhất.

Constraints

  • \(1 \le n \le 2 \cdot 10^5\)
  • \(1 \le k_i \le 10^9\)

Example

Sample input

8
1 2 1 3 2 7 4 2

Sample output

5


Bình luận

  • ronaldo12345 10:57 a.m. 23 Tháng 12, 2024 chỉnh sửa 4
    Hint

    Sử dụng sliding window

    • \(left\)\(right\) đại diện cho đầu và cuối của dãy con hiện tại.
    • Nếu bài hát tại \(right\) đã có trong \(baihatdb\), xóa bài hát tại \(left\) khỏi tập hợp và tăng \(left\).
    • Thêm bài hát tại \(right\) vào tập hợp.
    #include <bits/stdc++.h>
    using namespace std;
    
    int main() {
        int n;
        cin >> n;
        vector<int> baihat(n);
        for (int i = 0; i < n; i++) {
            cin >> baihat[i];
        }
    
        unordered_set<int> baihatdb;
        int left = 0, cd = 0;
    
        for (int right = 0; right < n; right++) {
            while (baihatdb.count(baihat[right])) {
                baihatdb.erase(baihat[left]);
                left++;
            }
            baihatdb.insert(baihat[right]);
            cd = max(cd, right - left + 1);
        }
    
        cout << cd << endl;
        return 0;
    }
    
    • hovuviettruong 10:33 a.m. 2 Tháng 10, 2024
      Hint

      // Code này rùa, ai giải thích giúp với !!!!

      include<bits/stdc++.h>

      using namespace std;

      ll a[200005];

      int main()
      {

      ios_base::sync_with_stdio(0); cout.tie(0); cin.tie(0);
      
      int n; cin>>n;
      for (int i=1;i<=n;i++) cin>>a[i];
      
      unordered_map <ll, int> mp;
      unordered_map <ll,int> vt;
      int ans=0,cnt=0;
      for (int i=1;i<=n;i++){
        mp[a[i]]++;
        cnt++;
        if (i-vt[a[i]]<cnt && mp[a[i]]>0 )  { cnt=i-vt[a[i]]; mp[a[i]]--; }
        ans=max(ans,cnt);
        vt[a[i]]=i;
      }
      
      cout<<ans;
      

      }

      • hien18086 12:14 a.m. 29 Tháng 1, 2024

        https://ideone.com/nwbAJC
        cho em hỏi code này tại sao lại sai 3 test ạ

        • tk22NguyenHuuHongQuan 6:24 p.m. 4 Tháng 12, 2022

          In độ dài của dãy dài nhất mà mỗi bài hát là duy nhất là sao vậy mình vẫn chưa hiểu lắm