经济普查(c++)

题目描述

中国正在以前所未有的力度推进脱贫攻坚,国家计划在2020年使得在现行标准下的贫困人口实现全面脱贫,为此,需要对居民的经济状况进行普查。

给定一个正整数 $n$,表示人口数量。一开始,每个居民拥有的财产记为 $a_1​,a_2,⋯,a_n$,财产可能发生两种变化:

  • 一种来源于个体,由某个居民的经济活动而产生。在某个时刻,某个居民的财产会直接变成某个数值,可能升高也可能降低。

  • 一种来源于政策,在某个时刻,国家会对财产低于某个标准线全部的居民,实施政策支持,使得他们的财产全部正好到达标准线。

给定这些变化的详细参数,请做一次统计,输出每个居民最后拥有的财产数量。

输入描述

第一行:两个正整数$n$和$m$;

第二行:$n$个正整数表示$a1​,a2​,⋯,an$​;

接下来$m$行:每行依次表示一次财产变化:

  • 以字母i开头的表示一次个体变化,后接两个整数参数$u$和$t$,$u$表示财产发生变化的居民编号,$t$表示财产变化的结果;
  • 以字母p开头的表示一次政策变化,后接一个整数参数$s$,$s$表示政策的标准线。

数据范围

  • $1≤s≤100000$;
  • $1≤t≤100000$;
  • $1≤a_i​≤100000$;
  • 对于30%的数据,$n≤1000$,$m≤1000$;
  • 对于60%的数据,$n≤10000$,$m≤10000$;
  • 对于100%的数据,$1≤n≤100000$,$1≤m≤100000$。
输出描述

共 $n$ 行:第 $i$ 行有一个整数,表示 $i$ 号居民最后拥有的财产数量。

输入样例
4 3
10 20 30 40
p 35
i 1 20
p 25
输出样例
25
35
35
40
#include <iostream>
using namespace std;
int i, n, m, maxx = 0, a[100001], u[100001], s[100001], ans[100001];
char tmp;
int main()
{
    cin >> n >> m;
    for (i = 1; i <= n; ++i)
        cin >> a[i];

    for (i = 1; i <= m; ++i)
    {
        cin >> tmp;
        if (tmp == 'i')
            cin >> s[i] >> u[i];
        else
            cin >> u[i];
    }

    for (i = m; i > 0; --i)
        /* 找最后一次的个人财产变化 */
        if (s[i] == 0)
            maxx = max(maxx, u[i]);
        else if (ans[s[i]] == 0)
            ans[s[i]] = max(maxx, u[i]);

    for (i = 1; i <= n; ++i)
        if (ans[i] == 0)
            ans[i] = max(a[i], maxx);

    for (i = 1; i <= n; ++i)
        cout << ans[i] << endl;

    return 0;
}

 

  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值