牛客练习赛48 C,D,E
C 小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 ;
}
题意:给出一个一维行数组和一维列数组相加得到的矩阵,一开始从(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的更多相关文章
- 牛客练习赛48 C 小w的糖果 (数学,多项式,差分)
牛客练习赛48 C 小w的糖果 (数学,多项式) 链接:https://ac.nowcoder.com/acm/contest/923/C来源:牛客网 题目描述 小w和他的两位队友teito.toki ...
- 牛客练习赛48 A· 小w的a+b问题 (贪心,构造,二进制)
牛客练习赛48 A· 小w的a+b问题 链接:https://ac.nowcoder.com/acm/contest/923/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C ...
- 牛客练习赛48 D 小w的基站网络
链接:https://ac.nowcoder.com/acm/contest/923/D来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言52428 ...
- 牛客练习赛48 E 小w的矩阵前k大元素
E 思路: 优先队列,将迭代器变量作为结构体的变量. 迭代器走的时候只能像一个方向走,另外一个方向只有最开始才走.如下图所示: 如果两个方向同时走,同一个值会被遍历多次,像上图那样就能保证每个位置都走 ...
- 【并查集缩点+tarjan无向图求桥】Where are you @牛客练习赛32 D
目录 [并查集缩点+tarjan无向图求桥]Where are you @牛客练习赛32 D PROBLEM SOLUTION CODE [并查集缩点+tarjan无向图求桥]Where are yo ...
- 牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 逻辑,博弈 B
牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 https://ac.nowcoder.com/acm/contest/218/B 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 2621 ...
- 牛客练习赛31 D 神器大师泰兹瑞与威穆 STL,模拟 A
牛客练习赛31 D 神器大师泰兹瑞与威穆 https://ac.nowcoder.com/acm/contest/218/D 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 26214 ...
- 最小生成树--牛客练习赛43-C
牛客练习赛43-C 链接: https://ac.nowcoder.com/acm/contest/548/C 来源:牛客网 题目描述 立华奏是一个刚刚开始学习 OI 的萌新. 最近,实力强大的 ...
- 牛客练习赛28-B(线段树,区间更新)
牛客练习赛28 - B 传送门 题目 qn姐姐最好了~ qn姐姐给你了一个长度为n的序列还有m次操作让你玩, 1 l r 询问区间[l,r]内的元素和 2 l r 询问区间[l,r]内的 ...
随机推荐
- wpf 查找控件
public List<T> GetChildObjects<T>(DependencyObject obj, Type typename) where T : Framewo ...
- 五、通过密码访问API
通过密码访问API 一.客户端 图: 客户端请求代码: static void Main(string[] args) { Console.WriteLine("确定三个项目都已经启动&qu ...
- Codeforces 1186F - Vus the Cossack and a Graph 模拟乱搞/欧拉回路
题意:给你一张无向图,要求对这张图进行删边操作,要求删边之后的图的总边数 >= ceil((n + m) / 2), 每个点的度数 >= ceil(deg[i] / 2).(deg[i]是 ...
- linux-tomcat-install
1.解压: tar zxvf xxx.tar.gz 配置JDK的环境变量,在etc/profile文件中添加 2.修改Tomcat启动端口 cd tomcat/conf/server.xml中的con ...
- Spark核心原理初探
一.运行架构概览 Spark架构是主从模型,分为两层,一层管理集群资源,另一层管理具体的作业,两层是解耦的.第一层可以使用yarn等实现. Master是管理者进程,Worker是被管理者进程,每个W ...
- PHPCMS如何修改网站名称,网站关键词,网站描述
首先需要登录网站后台,填写管理员用户名密码之后,点击登 点击phpcms后台顶部的"设置"按钮,如下图所示. 然后点击"相关设置"下的"站点管理&qu ...
- linux基础(六)
今天我们来看一下Samba服务和nginx服务. Samba服务 1.samba的功能 samba是一个网络服务器,用于Linux和Windows之间共享文件. 2.samba服务的启动.停止.重启 ...
- PHP chroot() 函数
改变根目录: <?php// Change root directorychroot("/path/to/chroot/"); // Get current director ...
- hdu 3974 Assign the task (线段树+树的遍历)
Description There is a company that has N employees(numbered from 1 to N),every employee in the comp ...
- SQL中循环的实现方式
一.第一种方法,游标 定义游标 DECLARE cur_ClubHeadCash CURSOR FAST_FORWARD READ_ONLY FOR,循环每行 FETCH NEXT FROM cur_ ...