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])); 
    	}
    }
    
  • 相关阅读:
    开始学习Oracle
    Oracle失败──用户错误
    2.1.1 数据库文件
    Oracle──网络失败
    再向前迈一步
    CSDN、CNBLOGS使用Windows Live Writer客户端发布日志时相关配置
    1.2 备份与恢复基础
    Oracle失败──用户进程失败
    Oracle失败类型
    MAC地址 正则表达式
  • 原文地址:https://www.cnblogs.com/iss-ue/p/12813986.html
Copyright © 2011-2022 走看看