티스토리 뷰
반응형
solved.ac 난이도 :플래 3
이문제는 일반 세그 레이지에서 +를 XOR(^)로 바꿔주면 된다. 하지만 이렇게만 바꿨을 경우 틀리게 된다. tree[n]=lazytree[n]*(e-s+1); 이거를
if((e-s+1)%2!=0){
tree[n]^=lazytree[n];//*(e-s+1);
}
이렇게 바꿔주면 된다.
저렇게 바꿔 주는 이유는 어떤수를 a라고 했을 때 b로 xor을 짝수번 해주면 a가 나오기 때문이다.
그렇기 때문에 구간개수가짝수가 아닐 경우 xor을 해주는 것이다.
이제 바꾸고 난 뒤 제출해주면
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<long long>l(1000001);
ll a,tree_size;
ll seg(vector<ll>&tree,vector<ll>&lazytree,ll n,ll s,ll e){
if(s==e){return tree[n]=l[s];}
return tree[n]=seg(tree,lazytree,n*2,s,(s+e)/2)^seg(tree,lazytree,n*2+1,(s+e)/2+1,e);
}
void propagate(vector<ll>&tree,vector<ll>&lazytree,ll n,ll s,ll e){
if(lazytree[n]!=0){
if(s!=e){
lazytree[n*2]^=lazytree[n];
lazytree[n*2+1]^=lazytree[n];
}
if((e-s+1)%2!=0){
tree[n]^=lazytree[n];//*(e-s+1);
}
lazytree[n]=0;
}
}
ll max1(vector<ll>&tree,vector<ll>&lazytree,ll n,ll s,ll e,ll left,ll right){
propagate(tree,lazytree,n,s,e);
if(left>e||right<s){return 0;}
if(left<=s&&e<=right){return tree[n];}
return max1(tree,lazytree,n*2,s,(s+e)/2,left,right)^max1(tree,lazytree,n*2+1,(s+e)/2+1,e,left,right);
}
void change(vector<ll>&tree,vector<ll>&lazytree,ll n,ll s,ll e,ll s1,ll e1,ll f){
propagate(tree,lazytree,n,s,e);
if(s1<=s&&e<=e1){lazytree[n]^=f;propagate(tree,lazytree,n,s,e);return;}
if(e1<s||s1>e){return;}
change(tree,lazytree,n*2,s,(s+e)/2,s1,e1,f);
change(tree,lazytree,n*2+1,(s+e)/2+1,e,s1,e1,f);
tree[n]=tree[n*2]^tree[n*2+1];
}
int main()
{
ll b,c,d,q,k,gh,gk;
scanf("%lld",&a);
int h=(int)ceil(log2(a));
tree_size=(1<<(h+1));
int i;
vector<ll>tree(tree_size);
vector<ll>lazytree(tree_size);
for(i=0;i<a;i++){scanf("%lld",&l[i]);}
seg(tree,lazytree,1,0,a-1);
scanf("%lld",&b);
for(i=0;i<b;i++){
scanf("%lld",&q);
if(q==2){scanf("%lld %lld",&c,&d);printf("%lld\n",max1(tree,lazytree,1,0,a-1,c,d));}
else{scanf("%lld %lld %lld",&c,&d,&gk);change(tree,lazytree,1,0,a-1,c,d,gk);}
}
}
반응형
'ps' 카테고리의 다른 글
BOJ 8895(막대 배치) 풀이 (0) | 2021.01.18 |
---|---|
BOJ 7894(큰 수)풀이 (0) | 2021.01.17 |
BOJ 1574(룩 어택)풀이 (0) | 2021.01.12 |
BOJ 2505(두 번 뒤집기)풀이 (0) | 2021.01.12 |
BOJ 17299(오등큰수)풀이 (0) | 2021.01.10 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 정렬
- 그래프 이론
- codeforces
- A Dance of Fire and Ice
- 알고리즘
- 수학
- 세그먼트 트리
- 다이나믹 프로그래밍
- 누적 합
- 트리
- 이분 탐색
- 개발
- 선분 교차 판정
- 그리디 알고리즘
- 자료 구조
- discord bot
- 최소 스패닝 트리
- 자료구조
- 트리에서의 다이나믹 프로그래밍
- 완전 탐색
- 구현
- BOJ
- 이분매칭
- 그래프 탐색
- C++
- Python
- 느리게 갱신되는 세그먼트 트리
- KOI
- 깊이 우선 탐색
- 잡봇
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함