HDU 4027 Can you answer these queries? (선분 수 + 폭력)
1730 단어 데이터 구조
한 단락 의 서열 과 두 가지 조작 을 제시 하고 첫 번 째 조작 은 x, y 구간 의 수 를 모두 제곱 으로 하고 두 번 째 조작 은 x, y 구간 을 구 합 니 다.
분석:
처음에는 선분 나무 로 만 들 지 못 했다. 순 선분 나무 밑 에 있 는 폭력 매 거 진 복잡 도 는 얼마 차이 가 나 지 않 았 지만 처방 이 나 기 때문에 적은 순환 에서 1 에 이 를 수 있 기 때문에 직접 이렇게 할 수 있 었 다.그러나 제목 은 인내 치 의 범 위 를 말 하지 않 았 고 0 이 너무 많 으 면 이 방법 도 쉽 지 않다.
#include
using namespace std;
const int maxn=1e5+10;
typedef long long ll;
ll tree[maxn<<2];
void build(int l,int r,int i){
if(l==r){
scanf("%lld",&tree[i]);
return;
}
int mid=l+r>>1;
build(l,mid,i<<1);
build(mid+1,r,i<<1|1);
tree[i]=tree[i<<1]+tree[i<<1|1];
}
void change(int tl,int tr,int l,int r,int i){
if(tl>r||tr>1;
change(tl,tr,l,mid,i<<1);
change(tl,tr,mid+1,r,i<<1|1);
tree[i]=tree[i<<1]+tree[i<<1|1];
}
ll query(int tl,int tr,int l,int r,int i){
if(tl>r||tr>1;
return query(tl,tr,l,mid,i<<1)+query(tl,tr,mid+1,r,i<<1|1);
}
int main(){
int n,m,cs=1;
while(scanf("%d",&n)!=EOF){
memset(tree,0,sizeof tree);
build(1,n,1);
scanf("%d",&m);
printf("Case #%d:
",cs++);
while(m--){
int f,x,y;
scanf("%d%d%d",&f,&x,&y);
if(x>y) swap(x,y); // 。
if(f==1){
printf("%lld
",query(x,y,1,n,1));
}else{
change(x,y,1,n,1);
}
}
printf("
");
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.