靠 你知道我为什么一直TML吗!!!啊 我猜你肯定不知道 我改了一天的代码啊 一整天啊 没想到居然是用了cin和cout
一直就听说cin会很慢 没想到居然会这么慢 累觉不爱啊 感觉以后再也不会用cin cout了
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
struct treel
{
int left,right;
int cover;
}t[500000];
int n,m;
int sum=0;
int cover[50005];
void build(int l,int r,int step)
{
t[step].left=l;
t[step].right=r;
if(l==r)
{
t[step].cover+=cover[l];
return ;
}
build(l,(l+r)/2,step*2);
build((l+r)/2+1,r,step*2+1);
if(l!=r)
t[step].cover=t[step*2].cover+t[step*2+1].cover;
}
void Insert(int c,int d,int step)
{
if(c==t[step].left&&c==t[step].right)
{
t[step].cover=t[step].cover+d;
return;
}
int mid=(t[step].left+t[step].right)>>1;
if(c<=mid) Insert(c,d,step*2);
if(c>mid) Insert(c,d,step*2+1);
t[step].cover+=d;
}
void Find(int c,int d,int step)
{
if (c==t[step].left&&d==t[step].right)
{
sum=sum+t[step].cover;
return;
}
int mid=(t[step].left+t[step].right)>>1;
if (mid>=d)
Find(c,d,step*2);
else if(mid<c)
Find(c,d,step*2+1);
else
{
Find(c,mid,step*2);
Find(mid+1,d,step*2+1);
}
}
int main()
{
int T,i,x,y;
scanf("%d",&T);
int z=1;
while(T--)
{
scanf("%d",&n);
memset(t,0,sizeof(struct treel)*500000);
for(i=1; i<=n; i++)
{
cover[i]=0;
scanf("%d",&cover[i]);
}
build(0,n,1);
char que[10];
printf("Case %d:\n",z++);
while(1)
{
scanf("%s",que);
if(strcmp(que,"End")==0)
break;
scanf("%d%d",&x,&y);
sum=0;
if(strcmp(que,"Query")==0)
{
Find(x,y,1);
printf("%d\n",sum);
}
else if(strcmp(que,"Add")==0)
Insert(x,y,1);
else
Insert(x,-y,1);
}
}
return 0;
}