Codeforces1198B 思维+离线
2019-08-18 15:30
65 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_40534166/article/details/99705047
Codeforces1198B 思维+离线
题目链接:https://codeforces.com/problemset/problem/1198/B
题意:题意:给定n个数字,q次操作,操作分为两种(且称之为1类操作和2类操作),1 p x为把a[p]改为x, 2 x为把数组中所有小于x的数字全部改为x.
方法:对询问进行离线操作,即将询问数组先存起来,再从后向前依次处理每次询问,如果是1类询问且为第一次遇到的点则将其更新为max(此次的x值,之后的2类操作的x的最大值),并对其进行标记,之后不再访问,如果是2类询问,则将maxnum(最大的2类x值)进行更新maxnum=max(maxnum,x[i])(小的对大的无影响)。最后对原数据数组a[]进行遍历,对未访问的点进行更新,将其赋值为max(maxnum,a[i])。
AC代码:
#include<iostream> #include<cstdio> #include<set> #include<vector> #include<algorithm> #include<stack> #include<queue> #include<cmath> #include<string> #include<cstring> #include<cstdlib> #include<map> #include <fstream> using namespace std; #define scan(n) scanf("%d",&n) #define ll long long int v[200005]; int a[200005]; int b[200005]; int p[200005]; int x[200005]; int main() { int n,i,q; scan(n); for(i=1;i<=n;i++) scan(a[i]); scan(q); for(i=1;i<=q;i++) { scan(b[i]); if(b[i]==1) scanf("%d %d",&p[i],&x[i]); else scan(x[i]); } int maxnum=-1; memset(v,0,sizeof(v)); for(i=q;i>0;i--) { if(b[i]==1&&v[p[i]]==0) { v[p[i]]=1; a[p[i]]=max(x[i],maxnum); } else if(b[i]==2) { maxnum=max(maxnum,x[i]); } } for(i=1;i<=n;i++) if(v[i]==0) a[i]=max(maxnum,a[i]); printf("%d",a[1]); for(i=2;i<=n;i++) printf(" %d",a[i]); printf("\n"); return 0; }
相关文章推荐
- html5离线存储与cookie的区别
- 解题报告:BZOJ_3529:数表 莫比乌斯反演+离线处理
- Mono For Android离线激活
- win7环境下离线安装tensorflow
- POJ 1330 Nearest Common Ancestors (模板水题离线LCA,3级)
- 用npm离线安装webpack
- 百度云的离线下载
- 基于H5+ HBuilder开发app android离线打包步骤 记录比较关键点
- QQ在线图标 离线 QQ开通在线QQ服务 QQ陌生人直接聊天
- 三步搞定Eclipse离线安装svn插件
- Windows8 离线安装.NET3.5
- Openlayers之离线加载ArcGIS Server瓦片
- 离线博客发布测试
- Openlayers离线载入天地图
- Android ADT 离线下载技巧(告别在线安装的麻烦)
- 2017/8/20 离线赛
- Windows8.1 .NET Framework 3.5 离线安装
- 2017多校训练赛第九场 HDU 6162(离线处理+树链剖分+线段树解法)
- eclipse离线安装插件
- hadoop2.6快速离线部署