#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

#include typedef struct A{ int v[2]; }A; A arr[100001]; //입력 받는 구조체 타입 배열 A tree[400004]; //세그먼트 트리를 위한 구조체 타입 배열 A max(A t1, A t2) { //두 구조체에서 가장 큰 두개의 요소만으로 새로운 구조체를 리턴 int c=0, a=0, b=0; A hi; while(c t2.v[b]) ? t1.v[a++] : t2.v[b++]; } return hi; } A find(int s, int e, int node, int l, int r) { //찾기 if(s > r || e < l) return tree[0]; //범위가 넘어가면 0, 0인 구조체 리턴 if(l find(3, 3, 6, 1, 3) + find(4,..
- Total
- Today
- Yesterday
- 정렬
- 스택
- DP
- 누적합
- 브루트포스
- 1835
- Lazy Propagation
- 세그먼트 트리
- 최대공약수
- PASCAL
- DFS
- 덱
- 플로이드
- 누적 합
- Segment Tree
- 그리디
- 백준
- 오프라인 쿼리
- Krustal
- XOR
- union
- java
- C++
- C언어
- 그래프
- 1835번
- 기하학
- BFS
- 최소 스패닝 트리
- find
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |