Luogu P4145 하나님 이 문 제 를 푸 신 7 분 2 / 화신 이 각국 을 여행 하 다.
#include
#include
#include
#include
#define int long long
using namespace std;
inline void input(int &x){
int ans=0,f=1;
char c=getchar();
while(c>'9'||c='0'&&c<='9'){
ans=ans*10+c-48;
c=getchar();
}
x=ans*f;
}
inline void output(int x){
if(x<0)x=-x,putchar('-');
if(x>9)output(x/10);
putchar(x%10+48);
}
inline void writeln(int x){
output(x);
putchar('
');
}
int n,m,a[100005],c[400005],maxi[400005];
inline void build(int k,int l,int r){
if(l==r){
c[k]=a[l];maxi[k]=c[k];
return;
}
int mid=(l+r)>>1;
build(k<<1,l,mid);
build(k<<1|1,mid+1,r);
c[k]=c[k<<1]+c[k<<1|1];
maxi[k]=max(maxi[k<<1],maxi[k<<1|1]);
}
inline void fix(int k,int l,int r,int xl,int xr){
if(maxi[k]<=1)return;
if(l==r){
c[k]=sqrt(c[k]);maxi[k]=c[k];
return;
}
int mid=(l+r)>>1;
if(xl<=mid)fix(k<<1,l,mid,xl,xr);
if(xr>=mid+1)fix(k<<1|1,mid+1,r,xl,xr);
c[k]=c[k<<1]+c[k<<1|1];
maxi[k]=max(maxi[k<<1],maxi[k<<1|1]);
}
inline int query(int k,int l,int r,int xl,int xr){
if(xl<=l&&r<=xr){
return c[k];
}
int mid=(l+r)>>1,ans=0;
if(xl<=mid)ans+=query(k<<1,l,mid,xl,xr);
if(xr>=mid+1)ans+=query(k<<1|1,mid+1,r,xl,xr);
return ans;
}
signed main(){
input(n);
for(int i=1;i<=n;i++)input(a[i]);
build(1,1,n);
input(m);
for(int i=1;i<=m;i++){
int opt,x,y;
input(opt);input(X);input(y);
if(x>y)swap(x,y);
if(opt==0){
fix(1,1,n,x,y);
}
else{
writeln(query(1,1,n,x,y));
}
}
}
AC 의 길:
1. 트 리 변경 (lazytag) 폭 (단점) 검사: 30ptsTLE
2. 트 리 변경 (lazytag) 트 리 검색 WA 후 sqrt (x) + sqrt (y) 를 의식 합 니 다! =sqrt(x+y)
3. 문 제 를 참고 하여 폭 (단점) 트 리 검사: 40ptsTLE
4. 문 제 를 자세히 참고 하여 단일 지점 변경 (유지 구간 최대 치 maxi [k], 1 이면 변경 하지 않 음), 트 리 검색, 50pts 최적화
5. 충돌 완화 후 검색 시 l 도 rQvQ 보다 클 수 있 음
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.