HDOJ 1166 적병 포진(라인 트리)
에이~ 나무수조가 답답하지는 않을 거야......╮(╯Д╰)╭
code:
#include <stdio.h>
typedef struct
{
int l, r, count;
}node;
node tree[4*50005];
void Init(int root, int left, int right)
{
int m = (left+right)/2;
if(left == right)//
{
tree[root].l = tree[root].r = left;
scanf("%d",&tree[root].count);
return ;
}
tree[root].l = left; tree[root].r = right;
Init(2*root, left, m);
Init(2*root+1, m+1, right);
tree[root].count = tree[2*root].count+tree[2*root+1].count;
}
void modify(int root, int a, int b)//a , b
{
int m = (tree[root].l+tree[root].r)/2;
if(tree[root].l == tree[root].r && tree[root].l == a)//
{
tree[root].count += b;
return ;
}
if(a>m)
modify(2*root+1, a, b);
else
modify(2*root, a, b);
tree[root].count = tree[2*root].count+tree[2*root+1].count;
}
int search(int root, int left, int right)
{
int l = tree[root].l ,r = tree[root].r, m = (tree[root].l+tree[root].r)/2, sum = 0;
if(left<=l && right>=r)//
return sum += tree[root].count;
if(left>m)//
return sum = search(2*root+1, left, right);
else if(right<=m)//
return sum = search(2*root, left, right);
else
return sum = search(2*root+1, left, right)+search(2*root, left, right);
}
int main()
{
int t = 0, n = 0, count = 0, a = 0, b = 0;
char ch[10];
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
Init(1, 1, n);
printf("Case %d:
", ++count);
while(1)
{
scanf("%s",ch);
if(ch[0] == 'E')
break;
if(ch[0] == 'A')
{
scanf("%d %d",&a,&b);
modify(1,a,b);
}
else if(ch[0] == 'S')
{
scanf("%d %d",&a,&b);
modify(1,a,-b);
}
else
{
scanf("%d %d",&a,&b);
printf("%d
",search(1,a,b));
}
}
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.