ProgMe

template program

Apr 30th, 2020
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.37 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #include <ext/pb_ds/assoc_container.hpp>
  3. #include <ext/pb_ds/tree_policy.hpp>
  4.  
  5. #define int int64_t
  6. #define double long double
  7. #define F first
  8. #define S second
  9. #define pb push_back
  10. #define pf push_front
  11. #define ppb pop_back();
  12. #define ppf pop_front();
  13. #define For(n) for(int (i) = 0; (i) < n; (i)++)
  14. #define FOR(i, n) for(i; i < n; i++)
  15. #define YES cout << "YES\n";
  16. #define NO cout << "NO\n";
  17.  
  18. #pragma GCC optimize("O3")
  19. #pragma GCC target("avx,avx2,fma")
  20. #pragma GCC optimization ("unroll-loops")
  21.  
  22. using namespace std;
  23. using namespace __gnu_pbds;
  24.  
  25. const int N = 1e5;
  26. const int MAX = LLONG_MAX;
  27. const int MIN = LLONG_MIN;
  28. const int MOD = 1e9 + 7;
  29.  
  30. template<typename T>
  31. using orset = tree <T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
  32. template<typename T, typename K>
  33. using ormap = tree <T, K, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
  34. mt19937_64 rnd(chrono::steady_clock::now().time_since_epoch().count());
  35.  
  36. typedef long long ll;
  37. typedef pair <int, int> pii;
  38. typedef vector <int> vi;
  39. typedef deque <int> di;
  40. typedef deque <pii> dii;
  41. typedef map <int, di, greater <int> > mii;
  42. typedef set <int> si;
  43. typedef multiset <int> mi;
  44. typedef string st;
  45. typedef priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> heap_Dijkstra;
  46.  
  47. int max_in_array(int n, di a)
  48. {
  49. int mx = MIN;
  50. for (int i = 0; i < n; i++)
  51. mx = max(mx, a [i]);
  52. return mx;
  53. }
  54.  
  55. int min_in_array(int n, di a)
  56. {
  57. int mn = MAX;
  58. for (int i = 0; i < n; i++)
  59. mn = min(mn, a [i]);
  60. return mn;
  61. }
  62.  
  63. int lcm(int x, int y)
  64. {
  65. return(x * y / __gcd(x, y));
  66. }
  67.  
  68. int sqr(int x)
  69. {
  70. return x * x;
  71. }
  72.  
  73. double log(double a, double b)
  74. {
  75. return log(b) / log(a);
  76. }
  77.  
  78. int binpow(int x, int y)
  79. {
  80. if (y == 0)
  81. return 1;
  82. if (y & 1)
  83. return x * binpow(x, y - 1);
  84. else
  85. {
  86. int z = binpow(x, y / 2);
  87. return sqr(z);
  88. }
  89. }
  90.  
  91. double binpow (double x, double y, bool d)
  92. {
  93. return exp(y * log(x));
  94. }
  95.  
  96. di in(int n, di v)
  97. {
  98. v.resize(n);
  99. for (auto &i: v)
  100. cin >> i;
  101. return v;
  102. }
  103.  
  104. void out(di v)
  105. {
  106. for (auto i: v)
  107. cout << i << " ";
  108. }
  109.  
  110. di pref_sum(di v)
  111. {
  112. di rezult (v.size());
  113. if (v.empty())
  114. return rezult;
  115. rezult [0] = v [0];
  116. For(v.size())
  117. {
  118. if (!i)
  119. continue;
  120. rezult [i] = rezult [i - 1] + v [i];
  121. }
  122. return rezult;
  123. }
  124.  
  125. di counting_sort(int n, int k, di v)
  126. {
  127. int a [k + 1] = {};
  128. for (int i = 0; i < n; i++)
  129. a [v [i]]++;
  130. di rezult;
  131. for (int i = 0; i <= k; i++)
  132. {
  133. while (a [i]--)
  134. rezult.pb(i);
  135. }
  136. return rezult;
  137. }
  138.  
  139. class graph
  140. {
  141. public:
  142. int vertex, edge;
  143. di distance;
  144. graph();
  145. deque <di> gr;
  146. private:
  147. deque <bool> visited, used;
  148. public:
  149. void DFS(int u)
  150. {
  151. visited [u] = 1;
  152. for (int v = 0; v < gr [u].size(); v++)
  153. {
  154. if (!visited [v])
  155. DFS(v);
  156. }
  157. }
  158. void BFS(int start)
  159. {
  160. queue<int> q;
  161. q.push(start);
  162. used [start] = 1;
  163. distance [start] = 0;
  164. while (!q.empty())
  165. {
  166. int cur = q.front();
  167. q.pop();
  168. //Здесь должна быть обработка текущей вершины.
  169. for (int v: gr[cur])
  170. {
  171. if (!used[v]) {
  172. q.push(v);
  173. used[v] = 1;
  174. distance [v] = distance [cur] + 1;
  175. }
  176. }
  177. }
  178. }
  179. };
  180.  
  181. graph::graph()
  182. {
  183. cin >> vertex >> edge;
  184. gr.resize(vertex + 1);
  185. visited.resize(vertex + 1);
  186. used.resize(vertex + 1);
  187. distance.resize(vertex + 1);
  188. visited = {};
  189. distance = {};
  190. used = {};
  191. for (int i = 0; i < edge; i++)
  192. {
  193. int u, v;
  194. cin >> u >> v;
  195. gr [u].pb(v);
  196. gr [v].pb(u);
  197. }
  198. }
  199.  
  200. class w_graph
  201. {
  202. public:
  203. int vertex, edge;
  204. di distance;
  205. w_graph();
  206. vector <vector <pair <int, int> > > gr;
  207. void Dijkstra(int start)
  208. {
  209. for (int i = 1; i <= vertex; i++)
  210. distance [i] = MAX;
  211. distance [start] = 0;
  212. heap_Dijkstra q;
  213. q.push({0, start});
  214. while (!q.empty()) {
  215. pair<int, int> c = q.top();
  216. q.pop();
  217. int dst = c.first, v = c.second;
  218. if (distance [v] < dst)
  219. continue;
  220. for (pair<int, int> e: gr[v]) {
  221. int u = e.first, len_vu = e.second;
  222.  
  223. int n_dst = dst + len_vu;
  224. if (n_dst < distance [u]) {
  225. distance [u] = n_dst;
  226. q.push({n_dst, u});
  227. }
  228. }
  229. }
  230. }
  231. };
  232.  
  233. w_graph::w_graph()
  234. {
  235. cin >> vertex >> edge;
  236. gr.resize(vertex + 1);
  237. distance.resize(vertex + 1);
  238. distance = {};
  239. for (int i = 0; i < edge; i++)
  240. {
  241. int u, v, far;
  242. cin >> u >> v >> far;
  243. gr [u].pb({v, far});
  244. gr [v].pb({u, far});
  245. }
  246. }
  247.  
  248. class SegmentTree
  249. {
  250. public:
  251. int n;
  252. int32_t tree [4 * N + 1] = {};
  253. void tree_build(di a, int v, int l, int r)
  254. {
  255. if (l == r)
  256. {
  257. tree [v] = a [l];
  258. return;
  259. }
  260. int mid = (l + r) / 2;
  261. tree_build(a, v * 2, l, mid);
  262. tree_build(a, v * 2 + 1, mid + 1, r);
  263. tree [v] = tree [v * 2] + tree [v * 2 + 1];
  264. }
  265. void tree_build(int a [], int v, int l, int r)
  266. {
  267. if (l == r)
  268. {
  269. tree[v] = a[l];
  270. return;
  271. }
  272. int mid = (l + r) / 2;
  273. tree_build (a, v * 2, l, mid);
  274. tree_build (a, v * 2 + 1, mid + 1, r);
  275. tree [v] = tree [v * 2] + tree [v * 2 + 1];
  276. }
  277. void tree_update(int v, int l, int r, int where, int what)
  278. {
  279. if (l == r)
  280. {
  281. tree [v] = what;
  282. return;
  283. }
  284. int mid = (l + r) / 2;
  285. if (mid >= where)
  286. tree_update(v * 2, l, mid, where, what);
  287. else
  288. tree_update(v * 2 + 1, mid + 1, r, where, what);
  289. tree [v] = tree [v * 2] + tree [v * 2 + 1];
  290. }
  291. int tree_request(int v, int l, int r, int rl, int rr)
  292. {
  293. if (rl > rr)
  294. return 0;
  295. if (l == rl && r == rr)
  296. return tree [v];
  297. int mid = (l + r) / 2;
  298. return tree_request(v * 2, l, mid, rl, min(mid, rr)) + tree_request(v * 2 + 1, mid + 1, r, max(mid + 1, rl), rr);
  299. }
  300. };
  301.  
  302. void solve()
  303. {
  304.  
  305. }
  306.  
  307. int32_t main()
  308. {
  309. srand(time(NULL));
  310. ios::sync_with_stdio(false);
  311. cin.tie(0);cout.tie(0);
  312. #ifdef FILE
  313. freopen("input.txt", "r", stdin);
  314. freopen("output.txt", "w", stdout);
  315. #endif
  316. int t;
  317. cin >> t;
  318. while (t--)
  319. solve();
  320. }
Advertisement
Add Comment
Please, Sign In to add comment