列表

详情


NC255375. 游游的整数操作

描述

游游拿到了一个数组,她有两种操作;
1. 输入1 x,代表所有数加x。
2. 输入2 x,代表所有数减x,同时将所有的负数变成0。即对于每个a_i,把a_i变成max(a_i-x,0)

游游在操作结束后,希望你能告诉她所有数之和,答案对10^9+7取模。

输入描述

第一行输入两个正整数nk,代表数组长度以及操作次数。
第二行输入n个正整数a_i。代表初始的数组。
接下来的k行,每行输入两个正整数opx。其中op代表操作类型。
1\leq n,k \leq 10^5
1\leq x,a_i \leq 10^9
1\leq op \leq 2

输出描述

操作结束后所有数之和对10^9+7取模的值。

示例1

输入:

5 2
1 2 3 4 5
2 2
1 1

输出:

11

说明:

第一次操作后,数组变成 [0,0,1,2,3]
第二次操作后,数组变成 [1,1,2,3,4]

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

Java 解法, 执行用时: 898ms, 内存消耗: 22388K, 提交时间: 2023-08-12 09:55:57

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int k = in.nextInt();
        long[] a = new long[n];
        for(int i=0;i<n;i++){
            a[i] = in.nextInt();
        }
        long sum = 0;
        long min = 0;
        long mod = 1000000007;
        while(k-->0){
            int p = in.nextInt();
            long x = in.nextLong();
            if(p==1){sum += x;}
            else{sum -= x;}
            min = Math.min(sum,min);
        }
        long count = 0;
        for(int i=0;i<n;i++){
            if(a[i] + min >= 0){
                count += a[i] + sum;
            }else{
                count += sum - min;
            }
            count %= mod;
        }
        System.out.println(count);
    }
}

上一题