游游拿到了一个数组,她有两种操作; 1. 输入1 x,代表所有数加x。 2. 输入2 x,代表所有数减x,同时将所有的负数变成0。即对于每个,把变成。 游游在操作结束后,希望你能告诉她所有数之和,答案对取模。
区块链毕设网qklbishe.com为您提供问题的解答
游游拿到了一个数组,她有两种操作;
1. 输入1 x,代表所有数加x。
2. 输入2 x,代表所有数减x,同时将所有的负数变成0。即对于每个,把变成。
游游在操作结束后,希望你能告诉她所有数之和,答案对取模。
import java.io.*; import java.util.*; public class Main { static long[] nums,op; static boolean check(int p){ long ans=nums[p]; for(int i=0;i<op.length;i++){ ans+=op[i]; if(ans<=0) return false; } return true; } public static void main(String[] args) { FastReader in = new FastReader(); PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out)); int n=in.nextInt(),k=in.nextInt(),mod=(int)1e9+7; long res=0,sum=0; nums=new long[n]; op=new long[k]; for(int i=0;i<n;i++){ nums[i]=in.nextInt(); } for(int i=0;i<k;i++){ int c=in.nextInt(); if(c==2) c=-1; else c=1; op[i]=c*in.nextInt(); sum+=op[i]; sum%=mod; } Arrays.sort(nums); int l=0,r=n-1,mid=0,left=n; while(l<=r){ mid=l+(r-l)/2; if(check(mid)){ left=mid; r=mid-1; } else{ l=mid+1; } } for(int i=left;i<n;i++){ res+=nums[i]; res%=mod; } res+=(long)(n-left)*sum%mod; if(left>=1){ long ans=nums[left-1]; for(int i=0;i<op.length;i++){ ans+=op[i]; if(ans<0) ans=0; } res+=ans%mod*left; } res%=mod; out.println(res%mod); out.flush(); } } class FastReader { StringTokenizer st; BufferedReader br; public FastReader() { br = new BufferedReader(new InputStreamReader(System.in)); } String next() { while (st == null || !st.hasMoreElements()) { try { st = new StringTokenizer(br.readLine()); } catch (IOException e) { e.printStackTrace(); } } return st.nextToken(); } int nextInt() { return Integer.parseInt(next()); } long nextLong() { return Long.parseLong(next()); } double nextDouble() { return Double.parseDouble(next()); } String nextLine() { String str = ""; try { str = br.readLine(); } catch (IOException e) { e.printStackTrace(); } return str; } }
15:21
以上就是关于问题游游拿到了一个数组,她有两种操作;
1. 输入1 x,代表所有数加x。
2. 输入2 x,代表所有数减x,同时将所有的负数变成0。即对于每个,把变成。
游游在操作结束后,希望你能告诉她所有数之和,答案对取模。的答案
欢迎关注区块链毕设网-
专业区块链毕业设计成品源码,定制。
区块链NFT链游项目方科学家脚本开发培训