题解:P14913 「QFOI R3」难度评分

题解:P14913 「QFOI R3」难度评分

题目描述

洛谷共有 \(n\) 道题目,第 \(i\) 道题目的初始难度为 \(r_i\)

依次接收到了 \(m\) 个工单,第 \(j\) 个工单的内容为将第 \(p_j\) 道题目的难度更改为 \(d_j\)。每个工单只有以下两种可能的状态:

  • 已完成:进行相应的修改。
  • 已关闭:不进行相应的修改。

由于小 R 从不拖欠工作,在接到一个工单时,前面的所有工单均已处理完毕。也就是说,这些工单是按照接收到的顺序进行处理的。

现在告诉你所有题目和工单的情况,请你求出所有工单处理完毕后每道题目的难度。

输入输出格式

第一行两个整数 \(n,m\),表示题目数量和工单数量。

第二行 \(n\) 个整数,第 \(i\) 个整数 \(r_i\) 表示第 \(i\) 道题的初始难度。

接下来 \(m\) 行,每行两个整数 \(p_j,d_j\) 和一个字符串 \(s_j\),表示该工单的内容和状态。其中若 \(s_j\)Completed,则该工单的状态为已完成;若 \(s_j\)Closed,则该工单的状态为已关闭

一行,\(n\) 个整数,表示所有工单处理完毕后每道题目的难度。

数据范围

对于所有测试数据,保证:

  • \(1\le n,m\le 10^5\)\(1\le r_i\le 10^9\)\(1\le p_j\le n\)
  • \(1\le d_j\le 10^9\)\(s_j\) 要么为 Completed,要么为 Closed

题目思路

模拟。

首先输入所有的题目初始难度,然后判断 \(s_j\),若其为 Closed,则不更新 \(r_{p_j}\)

若其为 Completed,就更新 \(r_{p_j}=d_i\)。然后更新输出的 \(r_i\) 即可。

对于 \(m\) 行的 \(p_j,d_j\) 和字符串 \(s_j\),可以不用数组读入,直接使用循环读入每个数即可。

代码实现

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+10;
ll n,m;
ll r[N],p,d;
string s;
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>r[i];
    }
    while(m--){
        cin>>p>>d>>s;
        if(s=="Closed"){
           r[p]=r[p];
        }
        else{
            r[p]=d;
        }
    }
    for(int i=1;i<=n;i++){
        cout<<r[i]<<" ";
    }
    return 0;
}
posted @ 2025-12-28 18:24  M1_Byte  阅读(7)  评论(0)    收藏  举报