A - Absolute

留坑。

B - Counting Permutations

留坑。

C - Cover

留坑。

D - Game

puts("Yes")

  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. int n;
  6.  
  7. int main()
  8. {
  9. while (scanf("%d", &n) != EOF)
  10. {
  11. puts("Yes");
  12. }
  13. return ;
  14. }

E - Hack It

留坑。

F - Matrix

留坑。

G - Naive Operations

题意:给出$b[]$数组,里面是$1-n$ 的全排列,两种操作,一个区间+1,一个是区间求$\sum_{i = l} ^ {i = r} \lfloor \frac{a_i}{b_i} \rfloor$

思路:维护一个Min 表示这个区间内需要的最少的进位,如果有进位,就更新到底,如果没有进位就区间更新

  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define N 100010
  6. #define ll long long
  7.  
  8. ll arr[N];
  9.  
  10. struct node
  11. {
  12. int l, r;
  13. ll Min, lazy, sum, v;
  14. inline node() {}
  15. inline node(int _l, int _r)
  16. {
  17. l = _l; r = _r;
  18. Min = , lazy = , sum = , v = ;
  19. }
  20. }tree[N << ];
  21.  
  22. inline void pushup(int id)
  23. {
  24. tree[id].Min = min(tree[id << ].Min, tree[id << | ].Min);
  25. tree[id].sum = tree[id << ].sum + tree[id << | ].sum;
  26. }
  27.  
  28. inline void pushdown(int id)
  29. {
  30. if(tree[id].l >= tree[id].r) return;
  31. if(tree[id].lazy)
  32. {
  33. tree[id << ].lazy += tree[id].lazy;
  34. tree[id << | ].lazy += tree[id].lazy;
  35. tree[id << ].Min -= tree[id].lazy;
  36. tree[id << | ].Min -= tree[id].lazy;
  37. tree[id].lazy = ;
  38. }
  39. }
  40.  
  41. inline void build(int id, int l, int r)
  42. {
  43. tree[id] = node(l, r);
  44. if (l == r)
  45. {
  46. tree[id].v = arr[l];
  47. tree[id].Min = arr[l];
  48. return;
  49. }
  50. int mid = (l + r) >> ;
  51. build(id << , l, mid);
  52. build(id << | , mid + , r);
  53. pushup(id);
  54. }
  55.  
  56. inline void update(int id, int l, int r)
  57. {
  58. if (tree[id].l == l && tree[id].r == r && tree[id].Min > )
  59. {
  60. tree[id].lazy++;
  61. tree[id].Min--;
  62. return ;
  63. }
  64. if(tree[id].l == tree[id].r && tree[id].Min == )
  65. {
  66. tree[id].Min = tree[id].v;
  67. tree[id].sum++;
  68. return ;
  69. }
  70. pushdown(id);
  71. int mid = (tree[id].l + tree[id].r) >> ;
  72. if (r <= mid) update(id << , l, r);
  73. else if (l > mid) update(id << | , l, r);
  74. else
  75. {
  76. update(id << , l, mid);
  77. update(id << | , mid + , r);
  78. }
  79. pushup(id);
  80. }
  81.  
  82. ll anssum;
  83.  
  84. inline void query(int id, int l, int r)
  85. {
  86. if (tree[id].l >= l && tree[id].r <= r)
  87. {
  88. anssum += tree[id].sum;
  89. return;
  90. }
  91. pushdown(id);
  92. int mid = (tree[id].l + tree[id].r) >> ;
  93. if (l <= mid) query(id << , l, r);
  94. if (r > mid) query(id << | , l, r);
  95. pushup(id);
  96. }
  97.  
  98. int n, m;
  99. char str[];
  100. int l, r;
  101.  
  102. int main()
  103. {
  104. while(~scanf("%d %d", &n, &m))
  105. {
  106. for(int i = ; i <= n; ++i) scanf("%lld", arr + i);
  107. build(, , n);
  108. for(int i = ; i <= m; ++i)
  109. {
  110. scanf("%s", str);
  111. if(str[] == 'a')
  112. {
  113. scanf("%d %d", &l, &r);
  114. update(, l, r);
  115. }
  116. else
  117. {
  118. scanf("%d %d", &l, &r);
  119. anssum = ;
  120. query(, l, r);
  121. printf("%lld\n", anssum);
  122. }
  123. }
  124. }
  125. return ;
  126. }

H - Odd Shops

留坑。

I - Segment

留坑。

J - Swaps and Inversions

水。逆序对的意义就是每次只能交换相邻两个,最少的交换次数

  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define ll long long
  6. #define N 100010
  7.  
  8. int n, m; ll x, y;
  9. int arr[N], brr[N];
  10. int a[N];
  11.  
  12. inline void Init()
  13. {
  14. for (int i = ; i <= n; ++i) brr[i] = arr[i];
  15. sort(brr + , brr + + n);
  16. m = unique(brr + , brr + + n) - brr - ;
  17. }
  18.  
  19. inline int Get(int x)
  20. {
  21. return lower_bound(brr + , brr + + m, x) - brr;
  22. }
  23.  
  24. inline int lowbit(int x)
  25. {
  26. return x & (-x);
  27. }
  28.  
  29. inline void update(int x, int val)
  30. {
  31. for (int i = x; i <= n; i += lowbit(i))
  32. a[i] += val;
  33. }
  34.  
  35. inline int query(int x)
  36. {
  37. int res = ;
  38. for (int i = x; i > ; i -= lowbit(i))
  39. res += a[i];
  40. return res;
  41. }
  42.  
  43. int main()
  44. {
  45. while (scanf("%d%lld%lld", &n, &x, &y) != EOF)
  46. {
  47. for (int i = ; i <= n; ++i) scanf("%d", arr + i);
  48. Init(); memset(a, , sizeof a);
  49. for (int i = ; i <= n; ++i) arr[i] = Get(arr[i]);
  50. ll ans = ;
  51. for (int i = ; i <= n; ++i)
  52. {
  53. // ans += i - 1 - query(arr[i] - 1);
  54. // printf("%d %d\n", arr[i], query(arr[i] - 1));
  55. update(arr[i], );
  56. ans += i - query(arr[i]);
  57. // cout << arr[i] << " " << query(arr[i]) << endl;
  58. }
  59. printf("%lld\n", min(ans * x, ans * y));
  60. }
  61. return ;
  62. }

2018 Multi-University Training Contest 2 Solution的更多相关文章

  1. 2018 Multi-University Training Contest 1 Solution

    A - Maximum Multiple 题意:给出一个n 找x, y, z 使得$n = x + y +z$ 并且 $n \equiv 0 \pmod x, n \equiv 0 \pmod y, ...

  2. 2018 Multi-University Training Contest 3 Solution

    A - Problem A. Ascending Rating 题意:给出n个数,给出区间长度m.对于每个区间,初始值的max为0,cnt为0.遇到一个a[i] > ans, 更新ans并且cn ...

  3. 2018 Multi-University Training Contest 4 Solution

    A - Problem A. Integers Exhibition 留坑. B - Problem B. Harvest of Apples 题意:计算$\sum_{i = 0}^{i = m}C( ...

  4. 2018 Multi-University Training Contest 5 Solution

    A - Always Online Unsolved. B - Beautiful Now Solved. 题意: 给出一个n, k  每次可以将n这个数字上的某两位交换,最多交换k次,求交换后的最大 ...

  5. 2018 Multi-University Training Contest 6 Solution

    A - oval-and-rectangle 题意:给出一个椭圆的a 和 b,在$[0, b]中随机选择c$ 使得四个顶点在椭圆上构成一个矩形,求矩形周长期望 思路:求出每种矩形的周长,除以b(积分) ...

  6. 2018 Multi-University Training Contest 7 Solution

    A - Age of Moyu 题意:给出一张图,从1走到n,如果相邻两次走的边的权值不同,花费+1, 否则花费相同,求最小花费 思路:用set记录有当前点的最小花费有多少种方案到达,然后最短路 #i ...

  7. 2018 Multi-University Training Contest 8 Solution

    A - Character Encoding 题意:用m个$0-n-1$的数去构成k,求方案数 思路:当没有0-n-1这个条件是答案为C(k+m-1, m-1),减去有大于的关于n的情况,当有i个n时 ...

  8. 2018 Multi-University Training Contest 9 Solution

    A - Rikka with Nash Equilibrium 题意:构造一个$n * m$的矩阵,使得$[1, n * m]$ 中每个数只出现一次,并且纳什均衡只出现一次. 思路:从大到小的放置,每 ...

  9. 2018 Multi-University Training Contest 10 Solution

    A - Problem A.Alkane 留坑. B - Problem B. Beads 留坑. C - Problem C. Calculate 留坑. D - Problem D. Permut ...

随机推荐

  1. MySQL技术内幕:SQL编程 第2章 数据类型 读书笔记

    2.1 类型属性 2.1.1 UNSIGNED 数字无符号化, INT的值 -2147483648 ~ 2147483647  INT UNSIGNED的值 0 ~ 4294967295 int a ...

  2. Activity、Window和View三者间的关系有一定的见解

    一.简述如何将Activity展现在手机上 Tips: Activity本身是没办法处理显示什么控件(view)的,是通过PhoneWindow进行显示的 换句话说:activity就是在造Phone ...

  3. Core Location和MapKit的一些简单使用

      Core Location 1. 基本对象是CLLocation,有属性coordinate, altitude, horizontal/vertical Accuracy, timestamp, ...

  4. @ResponseBody将集合数据转换为json格式并返回给客户端

    spring-mvc.xml: <beans xmlns:mvc="http://www.springframework.org/schema/mvc" > <m ...

  5. JAVA Comparator 接口排序用法

    java的比较器有两类,分别是Comparable接口和Comparator接口. 在为对象数组进行排序时,比较器的作用非常明显,首先来讲解Comparable接口. 让需要进行排序的对象实现Comp ...

  6. CVE-2017-1000117命令注入验证

    首先,我们来看第一个问题,就是ssh的一种操作. ssh -oProxyCommand=gnome-calculator xxx 问题的本质在于ssh会把//后的host那么部分带-号的按照参数指令去 ...

  7. 使用servlet3.0提供的API来进行文件的上传操作

    servlet 3.0针对文件上传做了一些优化,提供了一些更加人性化的API可以直接在request中的到文件的名称.文件size,MIME类型,以及用InputStream表示的文件流的信息 @Re ...

  8. Windows Phone 7 程序等待页面的处理

    程序启动通常会有一个等待的过程,在这个过程中可以通过使用Popup控件配合BackgroundWorker类启动后台线程来实现. 控件的代码 PopupSplash.xaml <UserCont ...

  9. 用CMAKE编译配置的项目进行调试的方法

    在Linux 下用CMAKE编译的项目进行Debug 需进行设置: 1.在未设置之前 进行调试可能会出现错误报告:No source available for ...等一系列错误,这些错误可能就是你 ...

  10. Nginx服务基础

    Nginx的英文官方网站是http://nginx.org,在这里可以查看Nginx的各个软件版本信息.Nginx软件有三种版本:稳定版.开发版和历史稳定版.开发版更新较快,包含最新的功能和bug的修 ...