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,没联系过就是初始位置 第一种:统计同一个人两次联系之间的出现的 ...
随机推荐
- Canvas如何绘制精美的图?
一.Canvas的基本使用 首先在使用Canvas一般先在<body>中添加: <canvas id="></canvas> 然后使用Js进行获取canv ...
- VSCode C语言编程(二)新建项目及编译
添加工作区: 把文件夹在工作区删除: 把HelloWorld模板文件夹解压到工作目录 模板下载(代码解释请看模板里的注释) 添加项目文件夹: 编辑器打开的文件必须与main.c同目录 点击右边编译图标 ...
- 百度的Ueditor在VS2015/VS2010中配置需注意的地方
1.下载:https://ueditor.baidu.com/website/download.html#uedito 官网已无1.4.3的.net版本下载,不知道百度在搞什么,下载完整版和ASP版本 ...
- 自定义结构体 Map
struct Hashmap{ ,maxe=; ],nxt[maxe+],w[maxe+]; ]; ;;} void Add(int x,int y){son[++E]=y;nxt[E]=lnk[x] ...
- archlinux install.txt
++++++ 注意事项+++ +++++++++++++++++++++++++++ 强烈建议新手移步 Arch Wiki > 新手指南 经验者请参阅 Arch Wiki > 安装指南 若 ...
- 展开折叠效果 height未知 transition无效
展开折叠效果,没有设置height时 transition 不起作用 可以设置max-height .default { max-height: 500px; transition: all 1000 ...
- C# 修改/新建判断
//查询有无重复(新建用) public List<bloodBreedDetailsEntity> CodeList(string code) { var expression = Ex ...
- C#调用WSDL接口
http://www.cnblogs.com/wlming/p/8032782.html
- CSS常用小技巧
1.隐藏overflow滚动条 ::-webkit-scrollbar { display:none } 2.单行文字两端对齐(例:输入框前的label) // 若考虑兼容,文字间要有空格 { tex ...
- 三行代码实现垂直居中和cube
三行代码实现上下居中 position: relative;top: 50%;transform: translateY(-50%); 效果如下: 代码: <!DOCTYPE html> ...