2019 ICPC徐州 A Cat題解

2021-10-09 10:19:38 字數 1495 閱讀 3522

題目大意:

從1到正無窮的排列。

t次詢問,每次給乙個l,r,s ,每次在 [l,r] 選擇乙個最長的區間,使它的異或小於等於s.

t:5e5

l,r 都是1e18

s:1e18

資料範圍這麼大一定是規律題

打表發現異或後為0的區間是長度為4而且迴圈的,這樣子的長度為4的區間的開始位置應該模4等於2或者0,這樣子我們就可以在[l , r]區間內找到離l第二近的模4==0的位置in 和 離r第二近的模4等於3的位置out,為什麼是第二大呢,因為為了防止出現一些特殊情況,如果in>out就說明這個區間巨小,直接n^2跑一遍就好了。

如果in#include

#define ll long long

#define ull unsigned long long

#define mem(a,b) memset(a,b,sizeof(a))

#define inf 0x3f3f3f3f

#define io std::ios::sync_with_stdio(false);cin.tie(0)

#define endl '\n'

#define pii pair

#define sc(x) scanf("%d",&x)

using

namespace std;

const

int maxn =

1e5+10;

const

double eps =

1e-18

;const ull base =

13331

;const ll mod =

998244353

;int ck =0;

vector p;

intmain()

if(i%4==

0&&ck ==0)

} ck =0;

ll out =-1

;for

(ll i = r;i>=l;i--)if

(i%4==3

&&ck ==0)

} ll tmp =0;

if(in < out&& in!=-1

&& out!=-1

)if(in>out||in ==-1

||out ==-1

)for

(ll j = i+

1;j<=r;j++)}

}if(cnt ==

0)cnt =-1

; cout

for(ll i = l;i)for

(ll i = out+

1;i<=r;i++

)for

(int i =

0;isize()

;i++

)for

(int j = i+

1;jsize()

;j++)}

}if(cnt ==0)

cout<}}

icpc 徐州 A cat規律

a cat vj鏈結 題意 t次測試 t 5 10 5 t le5 times10 5 t 5 1 05 每次給定l r l rl r區間以及數字s ss,要求在這個區間中找到最長子段 x,y x,y x,y 使得x x 1 y 1 y sx bigoplus x 1 bigoplus.bigopl...

2019ICPC徐州網路賽

theme n個數編號為1 n,兩種操作 1 x 將編號為x的數置為不可得,2 x 詢問x位置及其後第乙個可得數的編號。1 n,x 1e9,1 q 1e6 solution 首先想到用線段樹維護。初始時線段樹每個l r位置的值為l,1 x操作對應將x位置值置為inf,2 x 操作相當於查詢區間 x,...

2019ICPC徐州站重現賽 ACFM題解

a cat 題解 先打出異或字首和的表,不難發現當在偶數字置pos時,pos,pos 3 這些數的異或和為0,這意味著中間的序列可以每四個四個的連一起,因為他們異或和的值為0,因此我們就可列舉開頭和結尾的位置,並維護最大長度。實現 include define ll long long using ...