1. 程式人生 > >洛谷3794:簽到題IV(套路題,常識題)

洛谷3794:簽到題IV(套路題,常識題)

題面
題意:給出一個序列,問有多少個區間滿足(該區間的gcd)xor(區間或)=k。
n,k≤5e5。

像我這種沒有常識,資料結構想不出就想分治+資料結構的蒟蒻自然是想不出的。

顯然,當右端點r確定了後,不同區間或與gcd都只有logN種,且相同的一段的區間的左端點為一個區間。我們就維護這logN段就可以了。

從小到大列舉r,先更新這logN個區間,再單調地統計答案就可以了。

#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <ctime>
#include <cstdio> #include <cstdlib> #include <cstring> using namespace std; #define mmst(a, b) memset(a, b, sizeof(a)) #define mmcp(a, b) memcpy(a, b, sizeof(b)) typedef long long LL; const int N=500010; int n,k,c[N]; LL ans; int gcd(int x,int y) { if(!y) return x; return
gcd(y,x%y); } int work(int x,int y,int op) { if(!op) return (x|y); return gcd(x,y); } struct yy { int tp,l[N],r[N],b[N],ops; void add(int x,int pos) { for(int i=1;i<=tp;i++) b[i]=work(b[i],x,ops); tp++; l[tp]=r[tp]=pos; b[tp]=x; } void
down() { int now=1; for(int i=2;i<=tp;i++) { if(b[now]!=b[i]) { l[++now]=l[i]; b[now]=b[i]; } r[now]=r[i]; } tp=now; } }f,g; void getans() { int h1=1,h2=1; while(1) { if(f.r[h1]>g.r[h2]) { if((f.b[h1]^g.b[h2])==k) ans+=g.r[h2]-max(f.l[h1],g.l[h2])+1; h2++; } else { if((f.b[h1]^g.b[h2])==k) ans+=f.r[h1]-max(f.l[h1],g.l[h2])+1; if(h1==f.tp&&h2==g.tp) break; h1++; } } } int main() { f.ops=1; cin>>n>>k; for(int i=1;i<=n;i++) { int hy; scanf("%d",&hy); f.add(hy,i); f.down(); g.add(hy,i); g.down(); getans(); } cout<<ans<<endl; return 0; }

相關推薦

3711倉鼠的數學題NTT+伯努利數

題面 題意:給出a陣列,求 ∑nk=0Sk(x)ak 所表示多項式的每一項係數。 額,直接將伯努利數帶進S裡,得 =∑k=0nakk+1∑g=0kCgk+1Bgxk+1−g=∑k=0nakk!∑g=0nBgg!xk+1−g(k+1−g)! 設c=k+

3794簽到IV套路常識

題面 題意:給出一個序列,問有多少個區間滿足(該區間的gcd)xor(區間或)=k。 n,k≤5e5。 像我這種沒有常識,資料結構想不出就想分治+資料結構的蒟蒻自然是想不出的。 顯然,當右端點r確定了後,不同區間或與gcd都只有logN種,且相同的一段的

4016】 負載平衡問題網絡流24最小費用最大流

eof out map set graph pre etc ret freopen 前言 網絡流24題還是要寫一下。 Solution 我們先來研究一下這個題目是個什麽東西: 每一個點有可能比平均數多,也有可能少,然後你就發現相當於是我們建了兩個超級源點和超級匯點,然後從這

P3195 [HNOI2008]玩具裝箱TOY單調隊列優化DP

span reg inf line 希望 決定 ifd 詳細 pac 題目描述 P教授要去看奧運,但是他舍不下他的玩具,於是他決定把所有的玩具運到北京。他使用自己的壓縮器進行壓縮,其可以將任意物品變成一堆,再放到一種特殊的一維容器中。P教授有編號為1...N的N件玩具,第

poj 3422 P2045 K取方格數方格取數加強版

open output bsp pac tput ons upd continue tdi Description: 給出一個n*n的矩陣,每一格有一個非負整數Aij,(Aij <= 1000)現在從(1,1)出發,可以往右或者往下走,最後到達(n,n),每達

3232】[HNOI2013] 遊走貪心+高斯消元

點此看題面 大致題意:一個無向連通圖,小ZZ從11號頂點出發,每次隨機選擇某條邊走到下一個頂點,並將ansans加上這條邊的編號,走到NN號頂點時結束。請你對邊進行編號,使總分期望值最小。 一個貪心的思想 由於貪心的思想,我們肯定是給期望訪問次數最

P2042】 [NOI2005]維護數列自閉記第一期

題目連結 首先,這題我是沒A的。。太毒瘤了 題目本身不難,都是\(Splay\)的基操,但是細節真的容易掛。 調了好久自閉了,果斷放棄。。 希望本節目停更。 放上最終版本 #include <cstdio> #include <algorithm> #define INF 214

設計模式物件去耦中介者觀察者

為了嚴格遵循MVC,MVVM等架構模式,經常需要物件去耦。 10、中介者模式:用一個物件來封裝一系列物件的互動方式。中介者使各物件不需要顯示地相互引用,從而使其耦合鬆散,而且可以獨立地改變它們之間的

最簡單的視音訊播放示例6OpenGL播放YUV420P通過Texture使用Shader

=====================================================最簡單的視音訊播放示例系列文章列表:=====================================================本文記錄OpenGL播放視訊

作業系統選擇題部分帶解析

作業系統題庫彙總一、選擇題1.下面的(B)不是檔案的儲存結構。A.索引檔案 B.記錄式檔案   C.串聯檔案 D.連續檔案順序檔案:包括連續檔案和串聯檔案順序檔案:記錄按在其檔案的中的邏輯順序依次存入儲

dp+高精度1005 矩陣取數遊戲NOIP 2007 提高第三

結束 efi -m ron highlight std mes c++ brush 帥帥經常跟同學玩一個矩陣取數遊戲:對於一個給定的n*m的矩陣,矩陣中的每個元素aij均為非負整數。遊戲規則如下: 1.每次取數時須從每行各取走一個元素,共n個。m次後取完矩陣所有元素;

P3374 【模板】樹狀數組 1 如單點修改+區間查詢

ace hold reg gif sticky too aps urn cnblogs P3374 【模板】樹狀數組 1 時空限制1s / 128MB 題目描述 如題,已知一個數列,你需要進行下面兩種操作: 1

2765[網絡流24]魔術球問題——題解

num void 答案 algo main cnblogs print 鏈表 log https://www.luogu.org/problemnew/show/P2765#sub 假設有n根柱子,現要按下述規則在這n根柱子中依次放入編號為1,2,3,...的球。

P3384 - 樹鏈剖分樹鏈剖分模板

題目連結 https://www.luogu.org/problemnew/show/P3384 【描述】 樹鏈剖分模板題,記一下板子 #include<bits/stdc++.h> #define node tree[id] #define lson tree[i

P2756 飛行員配對方案問題網路流24

思路: 二分圖匹配。 程式碼: #include<bits/stdc++.h> using namespace std; #define maxn 100 #define read(x)

P1044 卡特蘭數

https://www.luogu.org/problemnew/show/P1044 題目背景 棧是計算機中經典的資料結構,簡單的說,棧就是限制在一端進行插入刪除操作的線性表。 棧有兩種最重要的操作,即pop(從棧頂彈出一個元素)和push(將一個元素進棧)。 棧的重要性不言自

P1056排座椅貪心

https://www.luogu.org/problemnew/show/P1056 輸入輸出樣例 輸入樣例#1: 複製 4 5 1 2 3 4 2 4 3 2 3 3 3 2 5 2 4 輸出樣例#1: 複製 2 2 4 說明 上圖中用符號*

4016】 負載平衡問題網路流24最小費用最大流

前言 網路流24題還是要寫一下。 Solution 我們先來研究一下這個題目是個什麼東西: 每一個點有可能比平均數多,也有可能少,然後你就發現相當於是我們建了兩個超級源點和超級匯點,然後從這兩個點去分和流入。 然後對於這個環就可以直接建環(注意建邊的時候的一些細節操作) 跑一邊費用流就好了。 #inc

3355】 騎士共存問題網路流24最小割

前言 網路流24題怎麼這麼難做啊。 Solution 考慮這是一個二分圖,按照給出的圖發現黃色不能攻擊黃色,紅色不能攻擊紅色。 然後就是一個裸的二分圖求最小割,直接跑Dinic就好了,無腦實現。 #include<stdio.h> #include<stdlib.h> #inc

P4260[Code+#3]博弈論與概率統計 組合數學+莫隊/分塊

題目分析:一道很好的題,既不是無腦的演算法套路題,也不是單純的推式子題。因此我講得詳細一些。比賽的時候我因為時間問題沒有看這題,後來補了題面,花了一節數學課自己推出了一些東西(O(Tn)O(Tn)的做法)。後來看了官方題解,發現了一種關於組合數字首和的新