오랜만에 앳코더를 봤다. 그럭저럭 본것 같다. (안친 사이에 실력이 꽤 늘었다) 간략하게 풀이 설명을 한다! A 번 문제 A~B 사이에 K의 배수가 있는지 없는지 판별하는 문제다. B/K - (A-1)/K 가 0인지 아닌지 판별하면 된다. #include using namespace std; int n; int main() { ios_base::sync_with_stdio(false); cin.tie(0); cin >> n; int a,b; cin >> a >> b; cout > x; while(g m >> Q; for(int i = 1;i > q[i].a >> q[i].b >> q[i].c >> q[i].d; } a[0] = 1; dfs(1..
세 용액은 여러가지 풀이가 있습니다 1. 트리를 이용한 풀이 2. 이분탐색을 이용한 풀이 3. 양방향 탐색을 이용한 풀이 이 블로그에서는 양방향 탐색을 이용한 풀이 입니다. \(N\) 번을 돌면서 하나를 고정시키고 나머지 두개를 양방향 탐색으로 찾는 풀이입니다. 시간복잡도는 \(O(n^{2})\) 입니다. #include using namespace std; /// 풀이 : 하나를 고정시키고 나머지 두개를 양방향 탐색으로 찾을거에요! int n; long long a[5005]; int main() { cin >> n; for(int i = 1;i > a[i]; } sort(a+1,a+n+1); /// 정렬을 해야 가능해요! int idx1 = n-2,idx2 = n-1,idx3 = n; /// 여기에 ..
Mo's algorithm 을 사용하는 문제다. 와아아아아아아앙 짝짝짝짝 각 숫자마다 list로 관리하면서 (dq[i].front-dq[i].back) 의 값이 숫자 i 의 최대 길이이다. 이제 이 숫자 i의 최대길이를 O(k) 가 아닌 O(sqrt(K)) 에 구해아 한다. 이 방법은 최대길이를 관리하는 버킷을 만들어서 sqrt(K) 개로 쪼갠다음 각 구간을 관리한다. 이러면 제일긴 길이 를 찾는방법을 O(sqrt(K)) 만에 구할 수 있다. 자세한건 코드를 보자. #include using namespace std; list dq[300005]; int n,k,Q,val,sz; int ans[300005],a[300005]; int b[300005],cnt[5000005]; struct Query { ..
- Total
- Today
- Yesterday
- Rabin-Karp
- 비요뜨 존맛
- 비요뜨
- 하이퍼
- hyper
- 알고리즘 문제 풀이
- DP
- ABC
- Constructive
- 정렬
- gunwookim
- Offline Dynamic Connectivity
- 스택
- codeforces
- BOJ
- 세그먼트 트리
- 오일러 경로
- 쿼리
- PS
- 앳코더
- AtCoder
- 냄새 싫어
- 간단한 풀이
- 수열과 쿼리
- 김춘배
- 1909
- 누적 합
- combination
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |