线段树过样例但全WA,完全找不到问题,求调
查看原帖
线段树过样例但全WA,完全找不到问题,求调
759015
awa2333楼主2022/11/14 22:20
#include <iostream>
#include <iomanip>
#include <cmath>

using namespace std;
using llt=long long;
constexpr int maxn=200010;
struct node{
    int l,r;
    llt lazy;
    double sin,cos;
};
int n,m;
int datas[maxn];
node tree[4*maxn];
int ll(int i){
    return i*2;
}
int rr(int i){
    return i*2+1;
}
void pushup(int i){
    tree[i].sin=tree[ll(i)].sin+tree[rr(i)].sin;
    tree[i].cos=tree[ll(i)].cos+tree[rr(i)].cos;
}
void pd_impl(int i,int k){
    tree[i].lazy+=k;
    double sine=tree[i].sin,cosine=tree[i].cos;
    tree[i].sin=sine*cos(k)+cosine*sin(k);
    tree[i].cos=cosine*cos(k)-sine*sin(k);
}
void pushdown(int i){
    pd_impl(ll(i),tree[i].lazy);
    pd_impl(rr(i),tree[i].lazy);
    tree[i].lazy=0;
}
void build(int i,int l,int r){
    tree[i].l=l;
    tree[i].r=r;
    if(l==r){
        tree[i].sin=sin(datas[l]);
        tree[i].cos=cos(datas[l]);
        return;
    }
    int mid=(l+r)/2;
    build(ll(i),l,mid);
    build(rr(i),mid+1,r);
    pushup(i);
}
void add(int i,int l,int r,int k){
    if(tree[i].r<=r&&tree[i].l>=l){
        pd_impl(i,k);
        return;
    }
    if(tree[i].lazy){
        pushdown(i);
    }
    if(tree[ll(i)].r>=l){
        add(ll(i),l,r,k);
    }
    if(tree[rr(i)].l<=r){
        add(rr(i),l,r,k);
    }
    pushup(i);
}
double query(int i,int l,int r){
    if(tree[i].r<=r&&tree[i].l>=l){
        return tree[i].sin;
    }
    if(tree[i].lazy){
        pushdown(i);
    }
    double t=0;
    if(tree[ll(i)].r>=l){
        t+=query(ll(i),l,r);
    }
    if(tree[rr(i)].l<=r){
        t+=query(rr(i),l,r);
    }
    return t;
}
int main(){
    cin.tie(nullptr);
    ios::sync_with_stdio(false);
    cin>>n;
    for(int i=1;i<=n;++i){
        cin>>datas[i];
    }
    build(1,1,n);
    cin>>m;
    for(int i=1;i<=m;++i){
        int op,l,r;
        cin>>op>>l>>r;
        if(op==1){
            int k;
            cin>>k;
            add(1,l,r,k);
        }else{
            cout<<fixed<<setprecision(1)<<query(1,l,r)<<"\n";
        }
    }
}

求大佬指点

2022/11/14 22:20
加载中...