Codeforces 915E 離散化區間覆蓋

2022-05-07 03:48:16 字數 1535 閱讀 7961

我一直以來都錯認為離散化就是換個對映,其實還需要在離散值兩端加上相差為1的值才能真正離散

不然看一下test3就知道

不過這個離散姿勢太暴力,以至於我1000ms時限跑出998ms(其實是太懶沒有刪重複的排序..)

線段樹區間覆蓋沒啥好說的,自我感覺struct裡寫的足夠清晰了

終於能睡個好覺了

#includeusing namespace std;

const int maxn = 3e6+11;

int ll[maxn],rr[maxn],mark[maxn];

int ra[maxn],n,q;

#define rep(i,j,k) for(int i = j; i <= k; i++)

#define scan(a) scanf("%d",&a)

#define scann(a,b) scanf("%d%d",&a,&b)

#define println(a) printf("%lld\n",a)

typedef long long ll;

struct st

void pu(int o)

void pd(int o,int l,int r)

}void build(int o,int l,int r)

int m = l+r>>1;

build(lc,l,m);

build(rc,m+1,r);

pu(o);

}void update(int o,int l,int r,int l,int r,int v)

pd(o,l,r);

int m = l+r>>1;

if(l<=m) update(lc,l,m,l,r,v);

if(r>m) update(rc,m+1,r,l,r,v);

pu(o);

}ll query(int o,int l,int r,int l,int r)

}st;

int main()

rep(i,1,q) ra[2*q+1]=1; ra[2*q+2]=n;

sort(ra+1,ra+2*q+3);

int qq = unique(ra+1,ra+2*q+3)-ra-1;

int tot=qq;

rep(i,1,qq-1)

sort(ra+1,ra+tot+1);

tot=unique(ra+1,ra+tot+1)-ra-1;

qq=tot;

for(int i=qq;i>1;i--)

sort(ra+1,ra+tot+1);

tot=unique(ra+1,ra+tot+1)-ra-1;

rep(i,1,q) ll[i]=lower_bound(ra+1,ra+tot+1,ll[i])-ra,rr[i]=lower_bound(ra+1,ra+tot+1,rr[i])-ra;

st.init();st.build(1,1,tot);

rep(i,1,q)

}return 0;

}

Codeforces 976E 題解報告

1 當把所有的倍數2 a都加到同一health上,health增加的最多 2 先計算每乙個creature的hp dmg,按該值對所有的creature排序 再求和,i include using namespace std const int n 200 1000 9 int hp n dmg n...

codeforces 1030E 暴力 思維)

題目 題意 給定一些數,可將區間 l r 中某些數的二進位制位的1的位置更換,使得最終區間所有數異或和為0,求這樣的區間個數。思路 在那裡瞎dp了好久,wa的很徹底,借鑑了一下別人的思路。區間合法的條件是 這個區間1的個數為偶數,並且區間中二進位制位1最多的乙個數的二進位制個數小於等於和的一半。我們...

Codeforces 1270E 構造 數學

有 n 個二維平面上的點,每兩個點之間連一條線段,將這些點劃分為兩個非空的集合 a b 同乙個集合內的兩點之間線段用黃色標註,不同集合的兩點之間線段用藍色標註,使距離相同的線段顏色相同。先將所有點的座標以其中乙個點作為原點轉化一下,使其中必定有乙個點是 0,0 然後將所有點按奇偶分為四組 0代表偶數...