C++

· C++
for loop에서 const &auto의 사용for문을 사용하다보면 for(int i : res) 와 같은 문법을 사용할 때가 있다. 그런데 for(const auto& i : res) 문법도 있다. 둘의 차이는 값을 복사해서 넣는지, 참조만 하는지의 차이이다. 이 특성으로 인해 PS에서 시간초과가 날 수도 있다. ranged loopfor(int i : res) cout 위 for loop의 경우에는 res에서 i를 새로 만들어 값을 복사해서 넣는다. 그래서 i = 0과 같은 코드를 시행해도 원본은 바뀌지 않는다. 하지만 값을 복사하기 때문에 그 비용이 든다.for(auto& i : res) cout  위 for loop의 경우는 res의 값을 그대로 참조한다. 그래서 i = 0 명령을 내리면 값이 ..
· 백준
코드#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번째를 찾는 과정// 사탕은 인덱스별로 저장되어있고, 개수가 저장되어 있기 때문에 정렬된 상태// 이분탐색을 통해서 개수가 많으면 ..