线段树

 怎么觉得有dp的意思。。。

// 1e5 1e6 1e7 1e8 1e9  (1e5)
// 1 2 3 4 5 6
//
//#include <bits/stdc++.h>
//
//using namespace std;
//vector<int> v;
//int a[100];
//int main() {
//    int n, x;
//    cin>>n;
//    for(int i=1;i<=n;++i) {
//        cin>>a[i]; v.push_back(a[i]);
//    }
//    sort(v.begin(),v.end());
//    auto  e = unique(v.begin(), v.end());
//    for(int i=1;i<=n;++i) {
//        a[i] = lower_bound(v.begin(), e, a[i])-v.begin()+1;
//    }
//    for(int i=1;i<=n;++i) cout<<a[i]<<" "; cout<<"\n";
//return 0;
//}

// DFS序
//节点
//2     in
//4     in
//7     in
//7     out
//1     in
//1     out
//3     in
//3     out
//4     out
//6     in
//5     in
//5     out
//6     out
//2     out

#include <bits/stdc++.h>

using namespace std;

#define ls o<<1
#define rs o<<1|1

const int MAXN = 2e5+10;

int a[MAXN];

struct node {
    int l,r;
    int x;
}t[MAXN<<2];
inline void push_up(int o) {
    t[o].x = (t[ls].x+t[rs].x);
}
void build(int l,int r,int o) {
    t[o].l=l, t[o].r=r;
    if(l==r)  {t[o].x=a[l]; return;}
    int mid=(l+r)>>1;
    build(l,mid,ls); build(mid+1,r,rs);
    push_up(o);
}
inline void update(int s, int o, int x) {
    if(t[o].l==t[o].r && t[o].l==s) {
        t[o].x=x;return;
    }
    int mid=(t[o].l+t[o].r)>>1;
    if(s<=mid) update(s,ls,x);
    else update(s,rs,x);
    push_up(o);
}
inline int query(int l,int r, int o) {
    if(t[o].l>=l&&t[o].r<=r) return t[o].x;
    int mid=(t[o].l+t[o].r)>>1;
    if(r<=mid) return query(l,r,ls);
    else if(l>mid) return query(l,r,rs);
    else {
        return query(l,mid,ls)+query(mid+1,r,rs);
    }
}
int main() {
    int n; n=5;
    //
    for(int i = 1;i<=5;++i) a[i]=i;
    build(1,n,1);
    int q;
    cin>>q;
    while(q--) {
        int op,l,r,x;
        cin>>op;
        if(op==1) {
            cin>>l>>r;
            cout<<query(l,r,1)<<endl;
        }
        if(op==2) {
            cin>>l>>x; update(l,1,x);
        }
    }

return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值