scanf \n \r l灵活使用

姜同学在生日派对上收到了一个整数数组 A A,他决定对其执行一些操作。 从形式上看,他要依次执行的操作有 Q Q 个。每个操作的输入都属于下面三种类型之一: 1 l r:对于数组中下标介于 l l 和 r r 之间(包括 l l 和 r r)的元素,数值均增加 1 1。 -1 l r:对于数组中下标介于 l l 和 r r 之间(包括 l l 和 r r)的元素,数值均减少 1 1。 0,输出当前数组的最大值。 例如,如果初始数组为 [ 1 , 2 , 3 , 2 , 1 ] [1,2,3,2,1],执行操作 1 1 3 后,数组为 [ 2 , 3 , 4 , 2 , 1 ] [2,3,4,2,1];然后,在执行操作 -1 2 3 之后,得到数组 [ 2 , 2 , 3 , 2 , 1 ] [2,2,3,2,1]。 输入格式 第一行包含两个整数 N N 和 Q Q,表示数组的长度和操作个数; 第二行包含数组的 N N 个整数 A i A i ​ ,以空格分隔; 然后是 Q Q 行,每行对应一个操作。 输出格式 仅对于第三种操作,需要输出当前数组的最大值(注意换行)。 数据范围 对于 30 % 30% 的数据, N , Q ≤ 1000 N,Q≤1000。 对于另外 30 % 30% 的数据, N , Q ≤ 30000 N,Q≤30000。 对于另外 30 % 30% 的数据, N , Q ≤ 2 × 10 5 N,Q≤2×10 5 , 且 Q Q次操作中,第三种操作的次数 ≤ 10 ≤10。 对于 100 % 100% 的数据, 1 ≤ N , Q ≤ 2 × 10 5 1≤N,Q≤2×10 5 , 1 ≤ A i ≤ 10 9 1≤A i ​ ≤10 9 , 1 ≤ l ≤ r ≤ 2 × 10 5 1≤l≤r≤2×10 5 。 #include<bits/stdc++.h> using namespace std; long long n,m,a[1000005],c[1000005],t[1000005],l,r; int main(){ cin>>n>>m; for(int i=1;i<=n;i++){ scanf("%lld",&a[i]); c[i]=a[i]-a[i-1]; } int x; for(int i=1;i<=m;i++){ scanf("%d",&x); if(x!=0){ cin>>l>>r; c[l]+=x; c[r+1]-=x; }else{ long long mx=0; for(int i=1;i<=n;i++){ t[i]=c[i]+t[i-1]; mx=max(mx,t[i]); } printf("%lld\n",mx); } } return 0; } 超时怎么办
03-24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值