#include #include typedef struct Q { //퀴리를 담을 구조체 int s, e, i; }Q; int main(void) { int n, m, nRoot; scanf("%d %d", &n, &m); nRoot = sqrt(n); //n의 제곱근 int arr[n+1]; //요소를 담을 배열 long long num[1000001]={}; //요소의 개수가 몇개 있는지를 나타내는 배열 (long long int으로 만들어야 곱하는 과정에서 overflow가 발생하지 않는다) Q query[m], key; for(int i=1; i=1; } int s = query[0].s, e = query[0].s-1; long long tmp = 0, ans[m]; //값은 주어진 범위 내에서..
#include #include int n, m, rootN; int num[200002]={}; //특정 숫자의 개수 int now[100001]={}; //같은 숫자들의 중복의 크기를 담음 //ex 1, 2, 3, 3, 4, 5, 5, 5 now[1] = 3, now[2] = 1, now[3] = 1; int main(void) { scanf("%d %d", &n, &m); //n m 입력 int arr[n+1]; //n개의 요소들을 담을 배열 rootN = sqrt(n); //n의 제곱근 for(int i=1; i= 1; } //mo.s 알고리즘에 의해 정렬된 쿼리들을 순차적으로 실행 int s=query[0][0], e=query[0][1], is=0; //s는 start, e는 end, is는 ..
#include #include int n, m, rootN; int num[100001]={}; //특정 숫자의 개수 int now[100001]={}; //같은 숫자들의 중복의 크기를 담음 //ex 1, 2, 3, 3, 4, 5, 5, 5 now[1] = 3, now[2] = 1, now[3] = 1; int main(void) { scanf("%d", &n); //n 입력 int arr[n+1]; //n개의 요소들을 담을 배열 rootN = sqrt(n); //n의 제곱근 for(int i=1; i= 1; } //mo.s 알고리즘에 의해 정렬된 쿼리들을 순차적으로 실행 int s=query[0][0], e=query[0][1], is=0; //s는 start, e는 end, is는 가장 많이 등장하..
#include int w=0, h=0, n=0; //크기를 지칭하는 배열 및, 회로개수 typedef struct A { //구조체 char x; char y; }A; int f(int x, int y) { //범위를 넘어가면 false 아니면 true return (x >= 0 && x = 0 && y < h); } int main(void) { scanf("%d %d", &w, &h); //크기 입력 scanf("%d", &n); //회로 개수 입력 A map[50][50] = {}; //맵에 있는 회로의 종류 (없으면 0, 0) A q[34000] = {}; //queue int qLeft = 0, qRight=0; //큐 왼쪽, 오른쪽 A lamp[2500] = {}; //la..
#include long long int arr[100001]={}; long long int tree[400004]={}; void update(int s, int e, int node, int index, int val) { //segment tree update if(s > index || e < index) return; tree[node] += val; if(s == e) return; int m = (s+e)/2; update(s, m, node*2, index, val); update(m+1, e, node*2+1, index, val); } long long int find(int s, int e, int node, int l, int r) { //segment tree에서 부분합 구하기 ..
#include int find(int x, int* p) { //부분집합의 대표노드 찾기 if(p[x] == x) return x; return p[x] = find(p[x], p); } void merge(int x, int y, int* p) { //부분집합 합치기 x = find(x, p); y = find(y, p); if(x!=y) p[x] = y; } int main(void) { int n, q, tmp, tmp_q; scanf("%d %d", &n, &q); tmp = n+q-1; tmp_q = q; int arr[n+1], parent[n+1], query[tmp][3], ans[tmp]; for(int i=1; i
- Total
- Today
- Yesterday
- 세그먼트 트리
- Krustal
- 1835
- 정렬
- 스택
- DFS
- 플로이드
- 오프라인 쿼리
- BFS
- 덱
- 누적합
- 그래프
- 누적 합
- DP
- 최대공약수
- 최소 스패닝 트리
- Mo.s
- C++
- union
- 트리
- 1835번
- find
- 6198번
- 카드
- 16120번
- C언어
- java
- 6198
- 백준
- 그리디
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |