D. Welfare State

滴答滴答---题目链接

D. Welfare State

time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

There is a country with nn citizens. The ii-th of them initially has aiai money. The government strictly controls the wealth of its citizens. Whenever a citizen makes a purchase or earns some money, they must send a receipt to the social services mentioning the amount of money they currently have.

Sometimes the government makes payouts to the poor: all citizens who have strictly less money than xx are paid accordingly so that after the payout they have exactly xx money. In this case the citizens don't send a receipt.

You know the initial wealth of every citizen and the log of all events: receipts and payouts. Restore the amount of money each citizen has after all events.

Input

The first line contains a single integer nn (1≤n≤2⋅1051≤n≤2⋅105) — the numer of citizens.

The next line contains nn integers a1a1, a2a2, ..., anan (0≤ai≤1090≤ai≤109) — the initial balances of citizens.

The next line contains a single integer qq (1≤q≤2⋅1051≤q≤2⋅105) — the number of events.

Each of the next qq lines contains a single event. The events are given in chronological order.

Each event is described as either 1 p x (1≤p≤n1≤p≤n, 0≤x≤1090≤x≤109), or 2 x (0≤x≤1090≤x≤109). In the first case we have a receipt that the balance of the pp-th person becomes equal to xx. In the second case we have a payoff with parameter xx.

Output

Print nn integers — the balances of all citizens after all events.

Examples

input

Copy

4
1 2 3 4
3
2 3
1 2 2
2 1

output

Copy

3 2 3 4 

input

Copy

5
3 50 2 1 10
3
1 2 0
2 8
1 3 20

output

Copy

8 8 20 8 10 

Note

In the first example the balances change as follows: 1 2 3 4 →→ 3 3 3 4 →→ 3 2 3 4 →→ 3 2 3 4

In the second example the balances change as follows: 3 50 2 1 10 →→ 3 0 2 1 10 →→ 8 8 8 8 10 →→ 8 8 20 8 10

#include <iostream>
#include<stdio.h>
using namespace std;
const int maxn=1e6+10;
int a[maxn],b[maxn],d[maxn];
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);
    int q;
    scanf("%d",&q);
    for(int i=1;i<=q;i++)
    {
        int k;
        scanf("%d",&k);
        if(k==1)
        {
            int x,y;
            scanf("%d%d",&x,&y);
            b[x]=i;
            a[x]=y;
        }
        else
        {
            scanf("%d",&d[i]);
        }
    }
    for(int i=q;i>=0;i--)
    {
        d[i]=max(d[i],d[i+1]);
    }
    for(int i=1;i<=n;i++)
    {
        if(i>1)
            printf(" ");

            printf("%d",max(a[i],d[b[i]]));
    }
    printf("\n");

    return 0;
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值