牛客練習賽45D 鍊錶 模擬

2022-08-19 20:00:13 字數 973 閱讀 3704

題意:陣列,提供三個操作,全部數與、或上乙個x,查詢陣列分成k份的最大k-or-and具體見原題。

思路:無聊正好看見有比賽。。尋思練練手。。結果敲了個水題就被這題卡住了。。下來寫了很久才過。

首先考慮到實際上參與答案計算的只有一開始大於k的位,於是建乙個鍊錶(偷懶用了vector,畢竟只有31個數),在操作的過程中維護這個鍊錶。答案分兩部分計算,一部分是全都一樣的,一部分是煉表裡的。在統計答案的時候看看是否是最新的,不是的就up一下(實際上最多up31次)。up的時候純暴力,從高位到低位一步步嘗試就行了。。實際複雜度高達o(n(logn)^3)。。但是還是水過去了,暴力check的地方應該可以優化一下。。

#include #define x first

#define y second

#define pb push_back

#define ll long long

#define pii pair#define mem(x,y) memset(x,y,sizeof(x))

#define bug(x) cout<<"debug "#x" is "void or_update(int x,int y)

is[x]=1;

}void and_update(int x,int y)

is[x]=0;

}bool tmp[maxn];

bool check(const vector&ck,int x);

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

}return cnt>=k;

}void update()

for(int j=30;j>=0;j--)if(real_cnt[j]>=k)lis.pb(j);

cin>>q;

while(q--)

else if(x==2)

else

}}/**

2 111 3013

**/

牛客練習賽45

a qaq dp i 0 表示前i個字元可以組成的 q dp i 1 表示前i個字元可以組成的 qa dp i 2 表示前i個字元可以組成的 qaq 掃一遍即可。includeusing namespace std define ll long long const int maxn 1e5 10 ...

牛客練習賽45 C Buy Fruits

在blueland上有 n n個水果店,它們的編號依次為 0,1,2.n 1 0,1,2.n 1。奇妙的是,每個水果店都只賣一種水果,且這些水果店賣的水果種類都各不相同。在每個水果店有乙個傳送門,且這些傳送門也有各自的編號,其中 i i號水果店的傳送門編號為 ai ai,每個傳送門的編號也各不相同,...

牛客練習賽24 D

名字挺有意思的,排插樹,雖然這是個圖。算dijkstra的模版題,求最短路裡面最長的那條,因為到講台的距離總是取決於最短的那條路,但是又要求離講台最遠,那麼我們通過dijkstra計算出起始點到所有點的最短路然後遍歷找最大值就好。如下 include using namespace std type...