洛谷OJ P2846 LJJ的數學課

2022-02-28 22:46:01 字數 2468 閱讀 8379

題目大意:略

題目思路:線段樹or樹狀陣列

我們可以將區間值做一些調整。a*3+b*2+c=a+(a+b)+(a+b+c)

也就是利用字首和建樹。然後單點更新也就轉換成了區間更新。修改乙個點x時,需要修改 x~n 的值(因為是按字首和建樹

查詢時也很簡單,查詢 x~y,則直接返回 x~y的值,再減去 (x-1的值)*(y-x+1),要把(1~x)的字首和減去。

用線段樹時要注意乙個坑點,若查詢時 x==1,則不用減去任何值直接輸出即可,否則有可能re(別問我怎麼知道的

#include #include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define lson rt<<1,l,mid

#define rson rt<<1|1,mid+1,r //

/巨集#define fi first

#define se second

#define ping(x,y) ((x-y)*(x-y))

#define mst(x,y) memset(x,y,sizeof(x))

#define mcp(x,y) memcpy(x,y,sizeof(y))

using

namespace

std;

#define gamma 0.5772156649015328606065120

#define mod 1000000007

#define inf 0x3f3f3f3f

#define n 1000005

#define maxn 100005typedef pair

pii;

typedef

long

long

ll;int

n,m,k,cnt,l,r;

ll a[maxn],mrk[maxn

<<2

],v;

struct

nodenode[maxn

<<2

];void build(int rt,int l,int

r)

int mid=l+r>>1

; build(lson);

build(rson);

node[rt].v=node[rt<<1].v+node[rt<<1|1

].v;

}inline

void pushup(int

rt)void add(int rt,int l,int

r)

if(mrk[rt])pushup(rt);

int mid=l+r>>1

;

if(r<=mid)add(lson);

else

if(l>mid)add(rson);

else

add(lson),add(rson);

node[rt].v=node[rt<<1].v+node[rt<<1|1

].v;

}ll

get(int rt,int l,int

r)int

main()

build(

1,1,n);

while(m--)

else

printf(

"%lld\n

",ans);}}

return0;

}

再附上樹狀陣列**

#include #include 

#include

#include

#include

#include

#include

using

namespace

std;

const

int n=100010

;typedef

long

long

ll;ll c[

2][n];

intn;

void add(int p,int x,ll y)}

ll query(

int p,int x)return

r;}int

main()

for(i=1;i<=q;i++)

else

}return0;

}

洛谷oj P1025 數的劃分 遞推 動態規劃

將整數 n n 分成 k k 份,且每份不能為空,任意兩個方案不相同 不考慮順序 例如 n 7n 7 k 3k 3 下面三種分法被認為是相同的。1,1,51,1,5 1,5,11,5,1 5,1,15,1,1 問有多少種不同的分法。輸入格式 n,kn,k 6620 0 2 le k le 62 k ...

洛谷 3768 簡單的數學題

根據crash的數字 很容易可以將式子化簡為 begin ans sum limits n sum limits ij i,j sum limits n d 3 sum limits right rfloor mu k k 2 left sum limits right rfloor i right...

洛谷 P4999 煩人的數學作業

題目鏈結 這道題從下午一來就開始寫,一直寫到 4 00 終於寫完了,累死我辣,但是做出來的感覺還是很蘇服的 本題思路 按位考慮 模擬 題目大意是很好理解的,就是算從l到r的所有數中每個數的每一位數字加起來的和。如果你從 l 到 r 這樣乙個個列舉的話,就是暴力了,不知道有沒有分 思路分析 既然是模擬...