滴答滴答---题目链接
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;
}