백준

· 백준
코드#include #include #include #include using namespace std;// 소수 목록을 저장할 벡터vector prime;// 에라토스테네스의 체로 소수 계산void sieve() { int max_limit = 316; // sqrt(100,000) vector is_prime(max_limit + 1, true); is_prime[0] = is_prime[1] = false; // 0과 1은 소수가 아님 for (int i = 2; i * i > tc; sieve(); // 소수 미리 계산 while (tc--) { int n; cin >> n; map factors; // 소인수와 지수를 저장 ..
· 백준
코드#include #include #include #include #include #include using namespace std;struct Query { int L, R, idx;};const int MAX_N = 300003;int n, c, a[MAX_N], m, max_cnt, max_num, freq[10001];void add(int x) { freq[x]++;}void remove(int x) { freq[x]--;}void FASTIO() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);}int main() { FASTIO(); cin >> n >> c; for (int i = 0; i > a[i]; int blo..
· 백준
코드#include #include #include using namespace std;typedef long long ll;const int MAX_N = 100003;ll n, q, m, cnt = 0;ll a[MAX_N];vector tree(MAX_N + 1, 0);vector, pair>> queries;vector> updates;vector> res;void update(int idx, ll diff) { while (idx 0) { ans += tree[idx]; idx -= (idx & -idx); } return ans;}void FASTIO() { ios_base::sync_with_stdio(false); cin.tie(NULL)..
· 백준
코드#include #include #include #include using namespace std;struct Query { int L, R, idx;};const int MAX_N = 100003;int n, q, max_cnt = 0;int arr[MAX_N], freq[200003], cnt[MAX_N];vector queries;vector res;void add(int x) { cnt[freq[x]]--; // 현재 빈도 감소 freq[x]++; // 값의 빈도 증가 cnt[freq[x]]++; // 증가한 빈도 반영 max_cnt = max(max_cnt, freq[x]); // 최대 빈도 갱신}void rem..
· 백준
코드#include #include #include #include using namespace std;struct Query { int L, R, idx;};const int MAX_N = 100003;int n, q, max_cnt = 0;int arr[MAX_N], freq[200003], cnt[MAX_N];vector queries;vector res;void add(int x) { cnt[freq[x]]--; // 현재 빈도 감소 freq[x]++; // 값의 빈도 증가 cnt[freq[x]]++; // 증가한 빈도 반영 max_cnt = max(max_cnt, freq[x]); // 최대 빈도 갱신}void rem..
· 백준
코드 (코사라주 알고리즘)#include #include #include #include #include #include #include #include #include using namespace std;const int MAX_N = 10003;int v, e, a, b, cnt = 1, visited[MAX_N];bool finished[MAX_N];vector adj[MAX_N], radj[MAX_N];vector> res;stack stk;void dfs(int x) { visited[x] = 1; for(int i : adj[x]) { if(!visited[i]) { dfs(i); } } stk.push(x);}void dfs2..
· 백준
코드#include #include #include #include using namespace std;typedef long long ll;ll n, q, num[100003], x, y, a, b;vector tree;void init(int s, int e, int node) { if (s == e) { tree[node] = num[s]; } else { int mid = (s + e) / 2; init(s, mid, node * 2); init(mid + 1, e, node * 2 + 1); tree[node] = tree[node * 2] + tree[node * 2 + 1]; }}ll query(int s, int e, int l, int r, int node) { if (s > r..
· 백준
코드#include #include #include #include #include using namespace std;int tc, n, a, b, res, r = 200003, t = 200003;vector> v;int main() { cin >>tc; while (tc--) { cin >> n; v.resize(n); res = 0; r = 200003; t = 200003; for (int i = 0; i > v[i].first >> v[i].second; } sort(v.begin(), v.end()); // 1차 면접 순으로 정렬한 후, 1등과 그보다 2차 면접 성적이 나은 사람들을 뽑음 for (pair pa : v) { if (pa.first 풀이사실 테케보..
· 백준
코드#include #include #include #include #include #include using namespace std;typedef long long ll;const int MAX_N = 2000003;ll n, a[MAX_N];vector tree;void update(vector &tree, int idx, ll diff) { while(idx &tree, int idx) { ll ans = 0; while(idx > 0) { ans += tree[idx]; idx -= (idx & -idx); } return ans;}int find_kth(int x) { int s = 1; int e = MAX_N; while..
· 백준
코드#include #include #include #include #include #include using namespace std;typedef long long ll;ll MAX_N = 1000003;ll n, a;vector tree;void update(vector &tree, ll idx, ll diff) { while(idx &tree, ll idx) { ll ans = 0; while(idx > 0) { ans += tree[idx]; idx -= (idx & -idx); } return ans;}// k번째를 찾는 과정// 사탕은 인덱스별로 저장되어있고, 개수가 저장되어 있기 때문에 정렬된 상태// 이분탐색을 통해서 개수가 많으면 ..