https://www.acmicpc.net/problem/13144
1. 배열활용 아이디어
vis[해당숫자] 방문여부표시 => 중복숫자인지 검사
2.전체코드
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n, m,ret,temp;
vector<ll> v;
int vis[1000000 + 1]; //해당숫자 방문했는지 여부
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n;
for (int i = 0; i < n; ++i) {
cin >> temp;
v.push_back(temp);
}
//v.push_back(0);
if (n == 1) {
cout << 1;
return 0;
}
ll e = 0, ret = 0;
for (int s = 0; s < n; ++s) {
while (e < n) {
if (vis[v[e]]) break; //중복숫자인경우
vis[v[e]] = 1; //중복숫자가아닌경우 방문표시
e++;
}
ret += (e - s); //1,2,3,4,5인경우 : e==5, s==0
vis[v[s]] = 0; //다음반복문위해 시작지점숫자 미방문표시
}
cout << ret;
}
'Algorithm > 투포인터' 카테고리의 다른 글
백준 20922 겹치는건 싫어 c++// 투포인터 정석풀이 형식 (0) | 2023.11.17 |
---|---|
백준 22862 c++ // 투포인터 응용방법(db 이용) (0) | 2023.11.17 |
백준 2003 수들의합2 c++ // 투포인터 정석풀이 (0) | 2023.11.13 |
백준 1644 소수의연속합 c++ // 소수판별 알고리즘, 투포인터 (0) | 2023.11.13 |
백준 1806 부분합 c++ // 투포인터, 누적합 구현방법 (0) | 2023.11.06 |