虽然oj上超时了吧,那是因为需要优化,暂时没想到怎么优化,但是我学会了线段树,值得纪念一下。
#include<stdio.h>
#define N 1000005
struct Node{
int left,right;
int val;
}c[N*4+5];
int father[N+5];
int n;
void build(int i,int l,int r)//建立一个以i为祖先的线段树
{
c[i].left=l;
c[i].right=r;
c[i].val=0;
if(l==r)
{
father[l]=i;
return ;
}
else
{
build(i*2 , l , (l+r)/2 );
build(i*2+1, (l+r)/2+1, r );
}
}
void insert(int l,int r,int num,int i)
{
if(l<=c[i].left && c[i].right<=r)
c[i].val+=num;
if(c[i].left==c[i].right)
return ;
if(l<=(c[i].left+c[i].right)/2) insert(l,r,num,i*2);
if(r>(c[i].left+c[i].right)/2) insert(l,r,num,i*2+1);
}
int main()
{
int T,M;
int num,l,r;
scanf("%d%d",&T,&M);
build(1,1,M);
char s[15];
while(T--)
{
scanf("%s",s);
if(s[0]=='A')
{
scanf