题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1166
始终不明为什么第一个代码不超时,然而第二个超时
#include<iostream> #include<cstdio> #include<cstring> const int MAX=50010; int s[MAX]; int n; int Sum[MAX]; using namespace std; void Add() { int a,b,i; scanf("%d%d",&a,&b); { for(i=a;i<=n;i++) Sum[i]+=b; } } void Sub() { int a,b,i; scanf("%d%d",&a,&b); { for(i=a;i<=n;i++) Sum[i]-=b; } } void Query() { int a,b,i; int sum; scanf("%d%d",&a,&b); printf("%d\n",Sum[b]-Sum[a-1]); } int main() { int t,i,j,k=1,x,y; char a[10]; scanf("%d",&t); for(i=0;i<t;i++) { printf("Case %d:\n",k++); memset(Sum,0,sizeof(Sum)); scanf("%d",&n); for(j=1;j<=n;j++) { scanf("%d",&s[j]); Sum[j]=(Sum[j-1]+s[j]); } scanf("%s",&a); while(a[0]!=‘E‘) { if(a[0]==‘A‘) { Add(); } else if(a[0]==‘S‘) { Sub(); } else Query(); scanf("%s",&a); } } return 0; }
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int a[50010],sum[50010]; int Query(int x,int y) { int i,c=0; for(i=x-1;i<y;i++) c+=a[i]; return c; } int main() { int t,n,i,j,k,l,b,c; scanf("%d",&t); for(k=1;k<=t;k++) { memset(sum,0,sizeof(sum)); scanf("%d",&n); c=0; char zl[10]={}; for(l=0;l<n;l++) scanf("%d",&a[l]); while(scanf("%s",&zl)&&zl[0]!=‘E‘) { scanf("%d%d",&j,&b); if(zl[0]==‘Q‘) { sum[c]=Query(j,b); c++; } else if(zl[0]==‘A‘) { a[j-1]+=b; } else if(zl[0]==‘S‘) { a[j-1]-=b; } } printf("Case %d:\n",k); for(i=0;i<c;i++) printf("%d\n",sum[i]); } return 0; }