标签:des style color java os io strong for
1 1 2 1 1 5 4 1 1 7 1 3 17 3 2 4 2 1 5
0 22
#include <iostream> #include <cstdio> #include <cstring> #include <vector> #include <string> #include <algorithm> #include <queue> using namespace std; typedef long long ll; const ll inf = 1e16; const int maxn = 100000+10; vector<ll>fib; struct node{ int lson,rson; ll sum; bool isFib; int mid(){ return (lson+rson)>>1; } }tree[maxn*4]; void pushUP(int rt){ tree[rt].sum = tree[rt<<1].sum+tree[rt<<1|1].sum; tree[rt].isFib = tree[rt<<1].isFib&&tree[rt<<1|1].isFib; } void build(int L,int R,int rt){ tree[rt].lson = L; tree[rt].rson = R; if(L==R){ tree[rt].sum = 0; tree[rt].isFib = false; return; } int mid = tree[rt].mid(); build(L,mid,rt<<1); build(mid+1,R,rt<<1|1); pushUP(rt); } void getFib(){ fib.push_back(1); fib.push_back(1); while(true){ ll d = fib[fib.size()-1]+fib[fib.size()-2]; if(d>inf) break; fib.push_back(d); } } ll serFib(ll x){ int idx = lower_bound(fib.begin(),fib.end(),x)-fib.begin(); if(fib[idx]==x) return x; if(idx > 0&&abs(fib[idx]-x) >= abs(fib[idx-1]-x)) idx--; return fib[idx]; } void add(int pos,int l,int r,int rt,int num){ if(l==r){ tree[rt].sum += num; tree[rt].isFib = false; return; } int mid = tree[rt].mid(); if(mid >= pos){ add(pos,l,mid,rt<<1,num); }else{ add(pos,mid+1,r,rt<<1|1,num); } pushUP(rt); } ll query(int L,int R,int l,int r,int rt){ if(L <= l && R >= r) return tree[rt].sum; ll ret = 0; int mid = (l+r)>>1; if(mid >= L){ ret += query(L,R,l,mid,rt<<1); } if(mid < R){ ret += query(L,R,mid+1,r,rt<<1|1); } return ret; } void setFib(int L,int R,int l,int r,int rt){ if(tree[rt].isFib) return; if(l==r){ tree[rt].sum = serFib(tree[rt].sum); tree[rt].isFib = true; return; } int mid = tree[rt].mid(); if(L <= mid){ setFib(L,R,l,mid,rt<<1); } if(R > mid){ setFib(L,R,mid+1,r,rt<<1|1); } pushUP(rt); } int n,m; int main(){ getFib(); while(~scanf("%d%d",&n,&m)){ int a,b,c; build(1,n,1); while(m--){ scanf("%d%d%d",&a,&b,&c); if(a==1){ add(b,1,n,1,c); } else if(a==2){ printf("%I64d\n",query(b,c,1,n,1)); } else{ setFib(b,c,1,n,1); } } } return 0; }
HDU4893-Wow! Such Sequence!(线段树),布布扣,bubuko.com
HDU4893-Wow! Such Sequence!(线段树)
标签:des style color java os io strong for
原文地址:http://blog.csdn.net/mowayao/article/details/38557153