牛客练习赛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]内的 ...
随机推荐
- python 多进程队列数据处理
# -*- coding:utf8 -*- import paho.mqtt.client as mqtt from multiprocessing import Process, Queue imp ...
- 链表反转&交换链表结点
leetcode链表反转链接 要求摘要: 反转一个单链表 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1-&g ...
- go语言从例子开始之Example8.数组
在 Go 中,数组 是一个固定长度的数列. package main import "fmt" func main() { 这里我们创建了一个数组 a 来存放刚好 5 个 int. ...
- java 数组的定义
package java03; /* 数组的初始化:就是创建一个数组,并向其中古语一些默认的值 两种常见的初始化方式: 1.动态初始化(指定长度) 2.静态初始化(指定内容) 动态初始化数组格式: 数 ...
- (PASS)JAVA数组去重 三种方法 (不用集合)
第一种方法(只学到数组的看): 定义一个新的数组长度和旧数组的长度一样,存储除去重复数据的旧数组的数据和0, package demo01; import java.sql.Array; import ...
- Python3.5-20190519-廖老师-自我笔记-获取对象信息
总是优先使用isinstance()判断类型,可以将指定类型及其子类“一网打尽”. 如果要获得一个对象的所有属性和方法,可以使用dir()函数,它返回一个包含字符串的list,比如,获得一个str对象 ...
- 在scite编辑器中使用astyle格式化c代码
用 vc6 很喜欢 alt+F8 的功能. 能够格式化代码. scite 没有这个功能. 今天看它的配置文件发现这么两行: command.name.0.*.cxx=Indent command.0. ...
- ceph cache pool配置
https://my.oschina.net/hanhanztj/blog/515410 0.引入 本文介绍如何配置cache pool tiering. cache pool的作用是提供可扩展的ca ...
- 【LeetCode 33】搜索旋转排序数组
题目链接 [题解] 会发现旋转之后,假设旋转点是i 则0..i-1是递增有序的.然后i..len-1也是递增有序的. 且nums[i..len-1]<nums[0]. 而nums[1..i-1] ...
- Android中软键盘弹出时关于布局的问题
当在Android的layout设计里面如果输入框过多,则在输入弹出软键盘的时候,下面的输入框会有一部分被软件盘挡住,从而不能获取焦点输入. 解决办法: 方法一:在你的activity中的oncre ...