Codeforces482B 線段樹構造

2021-07-22 17:09:03 字數 1396 閱讀 8563

題意:

有m個限制,每個限制有l,r,q,表示從a[l]~a[r]取且後的數一定為q,問是否有滿足的數列。

思路:

看到大牛說是線段樹,線段樹對於區間操作,印象中乘啊,+啊,-啊都不錯,但是並沒有就是對於這個位運算就不懂了;

這題的題意就是構造,大致思路是

每條限制是對於每個區間處理就是或上q(可以保證相應的二進位制一定是1),然後用線段樹處理完m個限制,最後還要詢問一下m個限制是否滿足;

所以具體操作就是利用線段樹進行區間或操作,區間查詢且。

ps:

在最後取n個數的時候撒比了,直接取了樹上的n個節點位置的數,= =、q[num].x和當left==right的num完全不一樣的啊。。哎真踏馬蠢了。。

code…

#include 

using namespace std;

typedef long long ll;

const int n=1e5+10;

struct asd;

asd q[n*4];

struct nod;

nod temp[n];

void build(int num,int l,int r)

build(2

*num,l,(l+r)/2);

build(2

*num+1,(l+r)/2+1,r);

q[num].x=q[2*num].x^q[2*num+1].x;

}void update(int num,int

s,int t,int c)

int mid=(q[num].left+q[num].right)/2;

if(mid>=t)

update(2

*num,s,t,c);

else

if(midupdate(2

*num+1,s,t,c);

else

}int query(int num,int

s,int t)

}vectorans;

void solve(int num)

if(q[num].left==q[num].right)

solve(2

*num);

solve(2

*num+1);

}int main()

bool flag=true;

for(int i=1;i<=m;i++)

}solve(1);

if(flag)

printf("%d",ans[0]);

for(int i=1;iprintf(" %d",ans[i]);}}

else

puts("no");

return

0;}

Codeforces482B 線段樹構造

題意 有m個限制,每個限制有l,r,q,表示從a l a r 取且後的數一定為q,問是否有滿足的數列。思路 看到大牛說是線段樹,線段樹對於區間操作,印象中乘啊,啊,啊都不錯,但是並沒有就是對於這個位運算就不懂了 這題的題意就是構造,大致思路是 每條限制是對於每個區間處理就是或上q 可以保證相應的二進...

codeforces 482c 狀壓 概率DP

題意 給出n個不同的串,長度一樣,別人隨機選乙個串,你要詢問他那個串某乙個位置是什麼字元直到能確定那個串才能停止,問詢問次數的期望。題解 50個串20個位置容易想到狀壓,把字串長度狀壓先考慮能否在某乙個狀態確定哪些字串能確定哪些不能確定,需要2 m m次,然後時間上不能再乘以n不然會爆,想想只要我知...

CODEFORCES 535B 解題報告

仍然是水題,但是還是有可以說的地方。主要思路就是dfs可重排列。4,7組成的幸運數字,在n位數字的構造方式有2 n種,而資料是最多9位,則列舉只有512種,n 2的複雜度足矣。只列舉相應位數的4 7排列,前面的個數用2 n累加。只要遵循先選4再選7即可構造字典順序,然後查詢相應數。以下是 可直接ac...