题目:
题解:
每次在数组后面新加一个数x时,答案就会加上当前长度个x,每次删除一个数时,答案就会减去当前长度个末尾的数。
代码:
#include<bits/stdc++.h>
using namespace std;
#define int long long
int arr[500050]={0};
signed main(){
int n;
scanf("%lld",&n);
int len=0;
int ans=0;
while(n--){
int x,y;
scanf("%lld%lld",&x,&y);
if(x>0){
while(x--){
ans=(ans-arr[len]*len)%1000000007;
--len;
}
}
++len;
arr[len]=y;
ans=(ans+arr[len]*len)%1000000007;
cout<<((ans+1000000007)%1000000007)<<endl;
}
return 0;
}
题后反思:
计算过程中有取模运算的最后在输出的时候一定要加上一个模再取输出,不然就会像我在比赛中wa了11发