标签: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