小w的糖果

题意:3种操作,第一种是使pos右边的数全部+1,第二种是pos右边的数依次+k(k从1开始递增),第三种是pos右边的数依次+k^2(k从1开始递增)。

解法:第一种我们很容易想到差分,我们顺着差分这个思路往下想,可以发现第二张可以差分之后再差分,第三种就3阶差分。

以第三种为例讲解:原数组:+0 +1 +4 +9 +16  一阶差分:+0 +1 +3 +5 +7  二阶差分:+0 +1 +2 +2 +2  三阶差分:+0 +1 +1 +0 +0  所以我们使c[pos]++,c[pos+1]++,然后做3次前缀和即可还原原数组。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int N=1e5+;
  4. const int MOD=1e9+;
  5. int n,m,a[N],b[N],c[N];
  6.  
  7. void getsum(int a[]) {
  8. for (int i=;i<=n;i++) a[i]=(a[i]+a[i-])%MOD;
  9. }
  10.  
  11. int main()
  12. {
  13. int T; cin>>T;
  14. while (T--) {
  15. scanf("%d%d",&n,&m);
  16. for (int i=;i<=n;i++) a[i]=b[i]=c[i]=;
  17. for (int i=;i<=m;i++) {
  18. int opt,pos; scanf("%d%d",&opt,&pos);
  19. if (opt==) a[pos]++;
  20. if (opt==) b[pos]++;
  21. if (opt==) c[pos]++,c[pos+]++;
  22. }
  23. getsum(a);
  24. getsum(b); getsum(b);
  25. getsum(c); getsum(c); getsum(c);
  26. for (int i=;i<=n;i++) printf("%d ",(a[i]+b[i]+c[i])%MOD);
  27. printf("\n");
  28. }
  29. return ;
  30. }

小w的矩阵前k大元素

题意:给出一个一维行数组和一维列数组相加得到的矩阵,一开始从(0,0)往下走或者往右走,走到(x,y)遇到的询问是:从(0,0)到(x,y)的矩阵中的数前k小的是哪些?

解法:一边走一边用multiset保存行列数,遇到询问则用优先队列暴力模拟前k大(就是从最小行+最小列然后慢慢往大方面扩展),因为题目说了查询总和不大于10^5所以时间是可以接受的。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int N=1e5+;
  4. int n,m,tt,a[N],b[N];
  5. typedef multiset<int>::iterator iter;
  6. multiset<int> r,c;
  7. struct dat{
  8. iter rt,ct;
  9. bool operator < (const dat &rhs) const {
  10. return (*rt)+(*ct)>*(rhs.rt)+*(rhs.ct);
  11. }
  12. };
  13. priority_queue<dat> q;
  14.  
  15. int main()
  16. {
  17. cin>>n>>m>>tt;
  18. for (int i=;i<=n;i++) scanf("%d",&a[i]);
  19. for (int j=;j<=m;j++) scanf("%d",&b[j]);
  20. int nr=,nc=;
  21. r.insert(b[]); c.insert(a[]);
  22. for (int T=;T<=tt;T++) {
  23. char opt[]; int t;
  24. scanf("%s%d",opt,&t);
  25. if (opt[]=='Q') {
  26. while (!q.empty()) q.pop();
  27. dat tmp,sav; tmp.rt=r.begin(); tmp.ct=c.begin();
  28. q.push(tmp);
  29. for (int i=;i<=t;i++) {
  30. sav=q.top(); q.pop();
  31. printf("%d",*(sav.rt)+*(sav.ct));
  32. if (i<t) printf(" "); else printf("\n");
  33.  
  34. tmp=sav;
  35. if (++tmp.rt!=r.end()) q.push(tmp);
  36. tmp=sav;
  37. if (tmp.rt==r.begin())
  38. if (++tmp.ct!=c.end()) q.push(tmp);
  39. }
  40. } else {
  41. if (opt[]=='R') {
  42. for (int i=nr+;i<=min(m,nr+t);i++) r.insert(b[i]);
  43. nr=min(m,nr+t);
  44. } else {
  45. for (int j=nc+;j<=min(n,nc+t);j++) c.insert(a[j]);
  46. nc=min(n,nc+t);
  47. }
  48. }
  49. }
  50. return ;
  51. }

牛客练习赛48 C,D,E的更多相关文章

  1. 牛客练习赛48 C 小w的糖果 (数学,多项式,差分)

    牛客练习赛48 C 小w的糖果 (数学,多项式) 链接:https://ac.nowcoder.com/acm/contest/923/C来源:牛客网 题目描述 小w和他的两位队友teito.toki ...

  2. 牛客练习赛48 A· 小w的a+b问题 (贪心,构造,二进制)

    牛客练习赛48 A· 小w的a+b问题 链接:https://ac.nowcoder.com/acm/contest/923/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C ...

  3. 牛客练习赛48 D 小w的基站网络

    链接:https://ac.nowcoder.com/acm/contest/923/D来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言52428 ...

  4. 牛客练习赛48 E 小w的矩阵前k大元素

    E 思路: 优先队列,将迭代器变量作为结构体的变量. 迭代器走的时候只能像一个方向走,另外一个方向只有最开始才走.如下图所示: 如果两个方向同时走,同一个值会被遍历多次,像上图那样就能保证每个位置都走 ...

  5. 【并查集缩点+tarjan无向图求桥】Where are you @牛客练习赛32 D

    目录 [并查集缩点+tarjan无向图求桥]Where are you @牛客练习赛32 D PROBLEM SOLUTION CODE [并查集缩点+tarjan无向图求桥]Where are yo ...

  6. 牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 逻辑,博弈 B

    牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 https://ac.nowcoder.com/acm/contest/218/B 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 2621 ...

  7. 牛客练习赛31 D 神器大师泰兹瑞与威穆 STL,模拟 A

    牛客练习赛31 D 神器大师泰兹瑞与威穆 https://ac.nowcoder.com/acm/contest/218/D 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 26214 ...

  8. 最小生成树--牛客练习赛43-C

    牛客练习赛43-C 链接: https://ac.nowcoder.com/acm/contest/548/C 来源:牛客网 题目描述 ​ 立华奏是一个刚刚开始学习 OI 的萌新. 最近,实力强大的 ...

  9. 牛客练习赛28-B(线段树,区间更新)

    牛客练习赛28 - B 传送门 题目 qn姐姐最好了~ ​ qn姐姐给你了一个长度为n的序列还有m次操作让你玩, ​ 1 l r 询问区间[l,r]内的元素和 ​ 2 l r 询问区间[l,r]内的 ...

随机推荐

  1. JavaScript如何诞生

    JavaScript之父谈语言诞生记 发表于2011-06-27 10:30| 9749次阅读| 来源ruanyifeng.com| 0 条评论| 作者阮一峰 prototypeprimitiveja ...

  2. ftp服务的安装

    ftp服务的安装 1.环境准备 2.安装服务 3.配置文件 3.1.匿名访问 把以下三个匿名上传写入开启 启动并查看服务状态: Linux客户端访问: Tips: 220表示服务正常,可以登陆:230 ...

  3. 转载:Angular的filter总结

    过滤器(filter)正如其名,作用就是接收一个输入,通过某个规则进行处理,然后返回处理后的结果.主要用在数据的格式化上,例如获取一个数组 中的子集,对数组中的元素进行排序等.ng内置了一些过滤器,它 ...

  4. mysql limit 数据重复及遗漏

    某天写了一段CRUD,提测给QA,后来想起来忘记按规则排序了,然后修改了代码提交,这个时候QA扔给我一条狗,不,是一个BUG. 内心一片忧伤,CRUD也有BUG啊,怎么办怎么办,赶紧看看去. BUG描 ...

  5. Rxjava Retrofix2 okhttp3网络框架自解(转)

    直接代码 类一 public class Okhttp3Utils { private static OkHttpClient mOkHttpClient; public static OkHttpC ...

  6. 解决VMwave下卡死的办法

    在VMwave路径下找到vmwave.log文件: 如上图所示:在资源监视器中找到name = vmwave-vmx.exe ,pid = 5940的进程,然后杀死.

  7. 代码解释n |= n >>> 16

    public static int nextPowerOf2(int n) {n -= 1;n |= n >>> 16;n |= n >>> 8;n |= n &g ...

  8. gene network analysis

      基因表达分析包括3个层次[68], 首先是单基因水平, 即比较对照组与实验组的每个基因是否存在表达差异, 这主要指差异基因表达分析; 其次是多基因水平, 如按照基因的共同功能.相互作用.共同表达等 ...

  9. vue.js mixins 使用

    export default { data () { return { } }, created () { }, methods: { arrayContain (array, obj) { for ...

  10. Python--前端基础之JavaScript(JS的引入方式,JS的变量、常量和标识符,JS的数据类型,运算符,流程控制,JavaScript的对象)

    JavaScript介绍 JavaScript是运行在浏览器端的脚步语言,JavaScript主要解决的是前端与用户交互的问题,包括使用交互与数据交互. JavaScript是浏览器解释执行的,前端脚 ...