#include using namespace std; int main(void) { ios::sync_with_stdio(0); int n, a, b; cin >> n; vector vec[n+1]; //간선들을 저장할 벡터들 queue q; //BFS을 위한 큐 bool v[n+1]; //방문했는가? int ans[n+1]; //부모노드 저장 memset(v, false, sizeof(v)); //v을 전부 false로 초기화 for(int i=2; i> a >> b; vec[a].emplace_back(b); vec[b].emplace_back(a); } //root 는 1 for(int i : vec[1]) q.push({1, i}); //큐에 간선에 1이 포함된 것을 집어넣기 v[1] = true..
#include using namespace std; deque num; deque oper; char level(char & op) { //연산자 우선순위 char ret = 2; //곱하기 나누기 if(op == '+' || op == '-') ret = 1; //더하기 빼기 return ret; } long long left(char & op) { //처음 그리고 두번째 숫자의 계산 long long ret = 0; if(op == '+') ret = num.front() + (*(num.begin()+1)); else if(op == '-') ret = num.front() - (*(num.begin()+1)); else if(op == '*') ret = num.front() * (*(num.b..
#include using namespace std; int main(void) { ios::sync_with_stdio(0); cin.tie(0); deque deq; int q, rotate=0; //덱의 앞의 위치 3시 0 6시 1 9시 2 12시 3 int ball=0, window=0; //공, 가림막 개수 char c; cin >> q; char s[10] = {}; while(q--) { cin >> s; if(s[2] == 's') { //push 뒤로 집어넣습니다. cin >> c; if(c == 'b') { //공 ++ball; deq.emplace_back(true); } else { //가림막 ++window; deq.emplace_back(false); } } else if(s[2..
#include #include #include #include #include using namespace std; int n, m, nSqrt, cnt=1; struct Query { //쿼리를 담을 구조체 int s, e, i; bool operator < (Query &other) { //sort에서 구조체타입의 비교 연산을 위해 연산자 오버로딩, Mo.s 알고리즘 이용 int a = s/nSqrt; int b = other.s/nSqrt; if(a != b) return a < b; //1. start/N의 제곱근이 더 작은것이 우선 return e < other.e; //2. 1.의 값이 같다면 end값이 더 작은 쿼리가 우선 } }; int main(void) { map M; //좌표압축을 ..

#include #include #include using namespace std; int main(void) { int n, q, k; scanf("%d %d %d", &n, &q, &k); //쿼리들을 저장할 배열 v[][] 왼쪽으로는 0번쿼리를 저장, 오른쪽으로는 1,2번쿼리를 저장 int v[q][2], left = 0, right = q-1, cnt = 0; deque deq; //나중에 사용할 덱 for(int i=0; i j) { //0번쿼리(삽입) if(out) deq.push_back(v[j][0]); else deq.push_front(v[j][0]); j++; } if(v[i][0] == 1) { //1번 쿼리 sort(deq.begin(), deq.end()); //오름차순 정렬 ..
#include #include #include using namespace std; //입력을 받을 배열, merge sort tree을 구성할 vector들 int arr[300001]; vector tree[1200001]; void update(int s, int e, int node, int index, int val) { //merge sort tree 수정 if(s > index || e < index) return; tree[node].push_back(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); } int find(int s, int ..
#include #include #include using namespace std; int arr[100001]; vector tree[400001]; void update(int s, int e, int node, int index, int val) { //merge sort tree 수정 if(s > index || e < index) return; tree[node].push_back(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); } int find(int s, int e, int node, int l, int r, int key) { //m..
#include #include #include using namespace std; int arr[100001]; //입력을 받을 배열 vector tree[400001]; //노드를 벡터로 구성 void update(int s, int e, int node, int index, int val) { //머지 소트 트리 수정 if(s > index || e < index) return; tree[node].push_back(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); } int find(int s, int e, int..
#include #define M 100 class Stack { //스택 int data[M]; int top; public: Stack() : top(0) {} bool isEmpty() {return top==0;} void push(int e) {data[top++] = e;} //넣기 int pop() {return data[--top];} //빼기 int peek() {return data[top-1];} //가장 최신꺼 반환 }; int main(void) { Stack s; //스택만들기 char str[31]; //문자열 배열 scanf("%s", str); //문자열 받기 for(int i=0; str[i]!='\0'; i++) { //올바른 괄호인지 파악 if(str[i] == ']'..
- Total
- Today
- Yesterday
- Krustal
- C언어
- DFS
- 플로이드
- 누적 합
- union
- 덱
- 브루트포스
- 그래프
- find
- Lazy Propagation
- 정렬
- 기하학
- C++
- 1835번
- 세그먼트 트리
- 스택
- 최소 스패닝 트리
- 누적합
- BFS
- DP
- 그리디
- 오프라인 쿼리
- java
- 백준
- PASCAL
- XOR
- 1835
- 최대공약수
- Segment Tree
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |