zoukankan      html  css  js  c++  java
  • B. Welfare State(RMQ问题的逆向考虑)

    (对于操作1,我们只关心最后一次操作。)

    (对于操作2,我们只关心值最大的一次操作。)

    (也就是说,我们记录每个居民最后一次被修改的位置)

    (然后它的最终答案就是从这个位置起,max(操作2最大的一次,最后一次修改的值))

    (当然,如果没有被修改过,默认被修改的位置在0.)

    (color{Red}{话说回来真的很佩服那些写线段树的人,为什么我不会用线段树呢(●ˇ∀ˇ*|})

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn=2e5+9;
    int n,w,da[maxn],b[maxn],vis[maxn];
    inline int max(int a,int b){return a>b?a:b;}
    struct p{
    	int lei,num,x;
    }a[maxn];
    int main()
    {
    	cin>>n;
    	for(int i=1;i<=n;i++)	scanf("%d",&b[i]);
    	scanf("%d",&w);
    	for(int i=1;i<=w;i++)
    	{
    		scanf("%d",&a[i].lei);
    		if(a[i].lei==1)
    		{
    			scanf("%d%d",&a[i].num,&a[i].x);
    			vis[a[i].num]=i,b[a[i].num]=a[i].x;	
    		}
    		else
    			scanf("%d",&a[i].x);
    	}
    	for(int i=w;i>=1;i--)
    	{
    		if(a[i].lei==1)	da[i]=da[i+1];//不是修改区间就继承最大 
    		else	da[i]=max(da[i+1],a[i].x);//否则尝试更新最大 
    	}
    	da[0]=da[1];
    	for(int i=1;i<=n;i++)
    	{
    		int xu=vis[i];//最后一次被修改的位置
    		printf("%d ",max(da[xu],b[i])); 
    	}
    }
    
  • 相关阅读:
    Unity3D热更新
    js
    xshell安装运行时提示缺少mfc110.dll
    Linux 分区的概念
    js
    Web 安全测试
    php 获取客户端的浏览器信息
    H5 获取地理位置
    JS -判断、监听屏幕横竖屏切换事件
    css 禁用移动端部分特性
  • 原文地址:https://www.cnblogs.com/iss-ue/p/12813986.html
Copyright © 2011-2022 走看看