codeforces 1198B - Welfare State
题目链接:http://codeforces.com/problemset/status
题目大意为有n个市民,每个市民有ai点数财富,以下有q次操作,操作类型为两类,1类:把第p个市民的财富改为x,2类:把所有财富小于x的市民的财富变为x。
题目数据量较大,强行n^2暴力模拟会超时,分析题意尝试缩小时间复杂度。观察到在对第i个市民进行最后一次1类操作之后,将不会影响此后的所有第2类操作,也就是说如果此后的第2类操作的x > ai的财富,将可以修改第i个市民的财富,因此每个市民的最终财富 = 对该市民的最后一次第1类操作和此后的第2类操作 两者之间的最大值即可。用ops[]数组记录第1类操作的顺序,opsmoney记录第2类操作的财富,q次操作从后往前遍历,做opsmoney[ i ] = max (opsmoney[ i ] ,opsmoney[ i +1 ])的更新,记录第i次操作之后 x 的最大值,方便后续比较,具体看代码。
AC代码:
#include<iostream>
#include<algorithm>
#include<vector>
#include<cstring>
using namespace std;
long long int ops[200005];
long long int opsmoney[200005];
long long int money[200005];
int main()
{
int n;
cin>>n;
for(int i = 0;i<n;i++){
cin>>money[i];
}
long long int q;
cin>>q;
memset(opsmoney,0,sizeof(opsmoney));
memset(ops,0,sizeof(ops));
for(int i = 0;i<q;i++){
int flag;
cin>>flag;
if(flag == 1){
long long int p;
long long int x;
cin>>p;
cin>>x;
ops[p-1] = i;
money[p-1] = x;
}
if(flag == 2){
long long int x;
cin>>x;
opsmoney[i] = x;
}
}
for(int i = q-1;i>=0;i--){
opsmoney[i] = max(opsmoney[i],opsmoney[i+1]);
}
for(int i = 0;i<n;i++){
money[i] = max(money[i],opsmoney[ops[i]]);
}
for(int i = 0;i<n;i++){
if(!i){
cout<<money[i];
}
else{
cout<<" "<<money[i];
}
}
return 0;
}
codeforces 1198B - Welfare State的更多相关文章
- [Codeforces 1199D]Welfare State(线段树)
[Codeforces 1199D]Welfare State(线段树) 题面 给出一个长度为n的序列,有q次操作,操作有2种 1.单点修改,把\(a_x\)修改成y 2.区间修改,把序列中值< ...
- Codeforces - 1199D - Welfare State - 单调栈 / 线段树
https://codeforc.es/contest/1199/problem/D 其实后来想了一下貌似是个线段树的傻逼题. 单调栈是这样思考的,每次单点修改打上一个最终修改的时间戳.每次全体修改就 ...
- Codeforces Round #576 (Div. 2) D. Welfare State
http://codeforces.com/contest/1199/problem/D Examples input1 output1 input2 output2 Note In the firs ...
- D. Welfare State
There is a country with
- B. Welfare State(RMQ问题的逆向考虑)
\(对于操作1,我们只关心最后一次操作.\) \(对于操作2,我们只关心值最大的一次操作.\) \(也就是说,我们记录每个居民最后一次被修改的位置\) \(然后它的最终答案就是从这个位置起,max(操 ...
- 【CodeForces】CodeForcesRound576 Div1 解题报告
点此进入比赛 \(A\):MP3(点此看题面) 大致题意: 让你选择一个值域区间\([L,R]\),使得序列中满足\(L\le a_i\le R\)的数的种类数不超过\(2^{\lfloor\frac ...
- Codeforces Round #576 (Div. 1)
Preface 闲来无事打打CF,就近找了场Div1打打 这场感觉偏简单,比赛时艹穿的人都不少,也没有3000+的题 两三个小时就搞完了吧(F用随机水过去了) A. MP3 题意不好理解,没用翻译看了 ...
- Codeforces Round #576 (Div. 2) 题解
比赛链接:https://codeforc.es/contest/1199 A. City Day 题意:给出一个数列,和俩个整数\(x,y\),要求找到序号最靠前的数字\(d\),使得\(d\)满足 ...
- CSU-ACM2020寒假集训比赛2
A - Messenger Simulator CodeForces - 1288E 两种解法,我选择了第二种 mn很好求,联系过就是1,没联系过就是初始位置 第一种:统计同一个人两次联系之间的出现的 ...
随机推荐
- Spring Cloud 5大组件
服务发现——Netflix Eureka 客服端负载均衡——Netflix Ribbon 断路器——Netflix Hystrix 服务网关——Netflix Zuul 分布式配置——Spring C ...
- unity踩坑2020-01-21
这几天一直在测试一个类似于传奇的2d界面游戏,目前做的测试为: 人物动作响应,主要是8方向的判断和资源文件精灵的刷新. 学到的知识点: 1,Enum.GetHashCode() 可以得到这个枚举的索引 ...
- k8s获取apiversion下面的对应可用资源
1- 获取api命令 [注:以下命令的url地址http://127.0.0.1/为k8s master的地址] kubectl api-versions 输出内容如下: apps/v1beta1 a ...
- 文件分配表(FAT)及其结构
原链接:https://blog.csdn.net/qianjintianguo/article/details/712590?utm_source=blogxgwz6 文件分配表(FAT)是文件管理 ...
- layer.open获取弹出层的input框的值
使用top.$('#txtReason').val();获取值: //不通过 function unAuditData(id) { parent.layer.open({ type: , title: ...
- (转)最小Hash和局部敏感Hash
转自:http://www.07net01.com/2015/08/907327.html 在数据挖掘中,有一个比较基本的问题,就是比较两个集合的相似度.关于这个问题,最笨的方法就是用一个两重循环来遍 ...
- vue里使用elementUI里的下拉树表格,如何定义个性化的子表格?
最近项目写到一个业务,首先需要展示各类分组的基本信息,然后需要点击每个分组展示该分组下子的所有具体信息 一开始我是打算用tab来展示就是首先父分组的名称就是各个不同的tab按钮,然后点击按钮再展示不同 ...
- python面试的100题(19)
61.如何在function里面设置一个全局变量 Python中有局部变量和全局变量,当局部变量名字和全局变量名字重复时,局部变量会覆盖掉全局变量. 如果要给全局变量在一个函数里赋值,必须使用glob ...
- Docker+JMeter单机版+MinIO
基于JMeter5.1.1+MinIO JMeter发起压测 MinIO作为文件服务器 一.目录结构: Dockerfile文件: FROM ubuntu:18.04# 基础镜像 MAINTAINE ...
- date-fns时间库的基本使用
在react中使用date-fns: import sub_days from 'date-fns/sub_days'; import start_of_week from 'date-fns/sta ...