FJOI2015 火星商店問題

2022-05-21 04:51:11 字數 2129 閱讀 9119

線段樹分治。以時間軸建立線段樹,每乙個線段樹節點,存放[l,r]時間內,有影響的操作1,建立可持久化trie樹,trie樹以商店位置為root,就可以支援商店的區間查詢,然後將操作0,按照商店位置排序,進行線段樹分治,每次到乙個節點,先把操作0插入trie樹,然後把所有當前時間記憶體的有影響的操作1全部拿出來,進行查詢即可。

#include#include#include#include#include#include#include#include#include#include#include#include//#include#include#include #pragma gcc optimize(2)

#define up(i,a,b) for(int i=a;ib;i--)

#define upd(i,a,b) for(int i=a;i<=b;i++)

#define dwd(i,a,b) for(int i=a;i>=b;i--)

//#define local

typedef long long ll;

typedef unsigned long long ull;

const double esp = 1e-6;

const double pi = acos(-1.0);

const int inf = 0x3f3f3f3f;

const int inf = 1e9;

using namespace std;

ll read()

while (ch >= '0' && ch <= '9')

return x * f;

}typedef pairpir;

#define lson l,mid,root<<1

#define rson mid+1,r,root<<1|1

#define lrt root<<1

#define rrt root<<1|1

const int n = 1e5 + 10;

struct trie

void insert(int &o, int pre, int x,int pos)

int query(int l, int r, int x, int pos)

else return query(ch[l][f], ch[r][f], x, pos - 1);

}}t;

int n, m;

int node_cnt, day;

struct node nd[n];

struct shop

}sp[n];

int ans[n];

struct tree

int mid = (l + r) >> 1;

if (l <= mid)update(lson, l, r, id);

if (r > mid)update(rson,l, r, id);

} void cal(int l, int r, int root)

for (auto k : tr[root])

}void div(int l, int r,int root, int l, int r)

up(i, 0, t1.size())sp[l + i] = t1[i];

up(i, 0, t2.size())sp[l + t1.size() + i] = t2[i];

div(lson, l, l + t1.size() - 1);

div(rson, l + t1.size(), r);

}}seg;

int main()

int op, l, r, x, d;

while (m--) ;

ans[node_cnt] = t.query(t.root[l - 1], t.root[r], x, 20);

} else ;

} }sort(sp + 1, sp + day + 1);

upd(i, 1, node_cnt)

seg.update(1, day, 1, nd[i].st, nd[i].ed, nd[i].id);

seg.div(1, day, 1, 1, day);

upd(i, 1, node_cnt)

return 0;

}

題解 FJOI2015火星商店問題

好幾天之前做的題目了,一直想寫一下部落格也沒騰出時間來,今天趕緊把坑給填上呼呼呼 這道題首先如果只考慮每個商店中沒有時間限制的物品時,我們只需要使用一棵可持久化trie樹來維護區間內的異或最大值即可,這樣我們可以把兩部分的問題分離開來。之後我們再考慮有時間限制與編號限制的情況下,該怎樣做?無腦做法線...

洛谷 FJOI2015 火星商店問題

初見安 這裡是傳送門 洛谷p4585 fjoi2015 火星商店問題 聽說是分治線段樹套可持久化trie 蒟蒻不會分治線段樹,就寫了乙個線段樹套trie。題意就是 n個初始為空的集合,m個操作。操作有 向某集合中加入乙個整數或查詢最近d次向編號在 l,r 中的集合加入的元素中,與x異或的最大值。我們...

FJOI2015 火星商店問題 線段樹分治

這道題的每個詢問都有兩個區間,乙個是時間區間,乙個是商店編號區間。每個購買也是和時間商店編號有關。如何讓這兩個引數聯絡起來,就需要用到線段樹表示時間區間。線段樹可以把時間區間分細。對於每乙個詢問,它都有乙個時間區間 cn t1 d 1,c nt1 cnt 1 d 1,cnt 1 cnt1 d 1 c...