小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次前缀和即可还原原数组。

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+;
const int MOD=1e9+;
int n,m,a[N],b[N],c[N]; void getsum(int a[]) {
for (int i=;i<=n;i++) a[i]=(a[i]+a[i-])%MOD;
} int main()
{
int T; cin>>T;
while (T--) {
scanf("%d%d",&n,&m);
for (int i=;i<=n;i++) a[i]=b[i]=c[i]=;
for (int i=;i<=m;i++) {
int opt,pos; scanf("%d%d",&opt,&pos);
if (opt==) a[pos]++;
if (opt==) b[pos]++;
if (opt==) c[pos]++,c[pos+]++;
}
getsum(a);
getsum(b); getsum(b);
getsum(c); getsum(c); getsum(c);
for (int i=;i<=n;i++) printf("%d ",(a[i]+b[i]+c[i])%MOD);
printf("\n");
}
return ;
}

小w的矩阵前k大元素

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

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

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+;
int n,m,tt,a[N],b[N];
typedef multiset<int>::iterator iter;
multiset<int> r,c;
struct dat{
iter rt,ct;
bool operator < (const dat &rhs) const {
return (*rt)+(*ct)>*(rhs.rt)+*(rhs.ct);
}
};
priority_queue<dat> q; int main()
{
cin>>n>>m>>tt;
for (int i=;i<=n;i++) scanf("%d",&a[i]);
for (int j=;j<=m;j++) scanf("%d",&b[j]);
int nr=,nc=;
r.insert(b[]); c.insert(a[]);
for (int T=;T<=tt;T++) {
char opt[]; int t;
scanf("%s%d",opt,&t);
if (opt[]=='Q') {
while (!q.empty()) q.pop();
dat tmp,sav; tmp.rt=r.begin(); tmp.ct=c.begin();
q.push(tmp);
for (int i=;i<=t;i++) {
sav=q.top(); q.pop();
printf("%d",*(sav.rt)+*(sav.ct));
if (i<t) printf(" "); else printf("\n"); tmp=sav;
if (++tmp.rt!=r.end()) q.push(tmp);
tmp=sav;
if (tmp.rt==r.begin())
if (++tmp.ct!=c.end()) q.push(tmp);
}
} else {
if (opt[]=='R') {
for (int i=nr+;i<=min(m,nr+t);i++) r.insert(b[i]);
nr=min(m,nr+t);
} else {
for (int j=nc+;j<=min(n,nc+t);j++) c.insert(a[j]);
nc=min(n,nc+t);
}
}
}
return ;
}

牛客练习赛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. 看不懂源码?先来恶补一波Object原型吧

    目录 Object Object属性 1.Object.prototype 2.Object.name Object方法 1.Object.assign() 2.Object.create() 3.O ...

  2. RGB和十六进制转换

    1.十六进制换RGB 例:  var color = '#69ad52' let r = parseInt(“0px” + color.slice(1, 3))  //105 let g = pars ...

  3. js手机端图片弹出方法

    1 $("img").click(function(){ //获取窗口可视大小 var width=$(window).width(); var height=$(window). ...

  4. sql-主键、外键、索引

    SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,你可以在建外 ...

  5. Linux下github的使用

    在linux下搭建git环境 1.创建Github账号,https://github.com 2.Linux创建SSH密钥: ssh-keygen ##一直默认就可以了 3.将公钥加入到Github账 ...

  6. objective-c: Functions and static keyword

    Functions function is a concept for C programming language, objective-c is entirely relies on C. To ...

  7. 68、Schema的相关类

    public class SObjectSchema { public void testSchema(){ //获取SObject的token //1.先获取所有token,然后通过key获取需要的 ...

  8. Linux的文件访问权限及修改权限命令chmod

    http://www.linuxso.com/command/chmod.html Linux的文件访问权限及修改权限命令chmod Mxx000 Mxx000 人赞同了该文章 Linux的文件访问权 ...

  9. Python Tuple元组的操作说明

    Tuple的特性在于,它的元素是不可变的(immutable),一旦设定,就不能使用索引去修改. >>> t1=1,2,3,4,5 #给Tuple赋值 >>> t1 ...

  10. 代码质量管理-Sonar

    1.Sonar 摘要 Sonar 是一个用于代码质量管理的开放平台.通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具. 与持续集成工具(例如 Hudson/Jenkin ...