週六的比賽情況:
前兩個小時做自己的c題,後來發現推不動,容斥複雜度過高,然後就轉移陣地了。
之後:助攻了k題,發現了題意讀錯了,然後修改之後過了。
助攻+完成了g題,一併推出容斥,並完成**提交,**:
#include#include#include#include#include#define maxn 100010
using namespace std;
const long long mo=1000000007;
long long fun;
bool vis[maxn];
long long prime[maxn];
long long inv2,inv3,inv6;
long long fac[32];
long long box[32];
long long tot;
long long total;
long long n,m;
long long qpow(long long x,long long y)
return (ans+mo)%mo;
}void getprime()
long long cal(long long x,long long temp)
void sfind(long long x,long long y,long long z,long long val)
}tree[maxn];
void pushup(long long id)
void build(long long id,long long l,long long r)
long long mid=tree[id].mid();
build(id*2,l,mid);
build(id*2+1,mid+1,r);
pushup(id);
}void update(long long id,long long pos,long long val)
long long mid=tree[id].mid();
if (pos<=mid)
else
pushup(id);
}long long query(long long id,long long l,long long r)
long long mid=tree[id].mid();
if (r<=mid)
else if (l>mid)
else
}struct xtree1
}tree1[maxn];
void pushup1(long long id)
void build1(long long id,long long l,long long r)
long long mid=tree1[id].mid();
build1(id*2,l,mid);
build1(id*2+1,mid+1,r);
pushup1(id);
}void update1(long long id,long long pos,long long val)
long long mid=tree1[id].mid();
if (pos<=mid)
else
pushup1(id);
}long long query1(long long id,long long l,long long r)
long long mid=tree1[id].mid();
if (r<=mid)
else if (l>mid)
else
}int main()
else }}
}做出了g題,被紀翔文告知了思路,後用雙線段樹+離散處理,因為我處理時間過長,紀翔文同時開了樹狀陣列的寫法,最後同時ac,**:
#include
#include
#include
#include
#include
#define maxn 200010
#define maxx 10000010
using namespace std;
long long cntx[maxx];
long long cnty[maxx];
struct pointp[maxn];
bool cmpx(point a,point b)
struct xtree
}treex[maxn];
void pushupx(long long id)
void pushdownx(long long id)
}void buildx(long long id,long long l,long long r)
long long mid=treex[id].mid();
buildx(id*2,l,mid);
buildx(id*2+1,mid+1,r);
pushupx(id);
}void updatex(long long id,long long l,long long r,long long val)
pushdownx(id);
long long mid=treex[id].mid();
if (r<=mid)
else if (l>mid)
else
pushupx(id);
}long long queryx(long long id,long long l,long long r)
pushdownx(id);
long long mid=treex[id].mid();
if (r<=mid)
else if (l>mid)
else
}struct ytree
}treey[maxn];
void pushupy(long long id)
void pushdowny(long long id)
}void buildy(long long id,long long l,long long r)
long long mid=treey[id].mid();
buildy(id*2,l,mid);
buildy(id*2+1,mid+1,r);
pushupy(id);
}void updatey(long long id,long long l,long long r,long long val)
pushdowny(id);
long long mid=treey[id].mid();
if (r<=mid)
else if (l>mid)
else
pushupy(id);
}long long queryy(long long id,long long l,long long r)
pushdowny(id);
long long mid=treey[id].mid();
if (r<=mid)
else if (l>mid)
else
}int main()
sort (p+1,p+n+1,cmpx);
long long totx=1;
memset (cntx,0,sizeof(cntx));
memset (cnty,0,sizeof(cnty));
p[0].x=0;
p[0].y=0;
cntx[p[0].x]=1;
for (i=1;i<=n;i++)
}buildx(1,1,totx);
cnty[p[0].y]=1;
long long toty=1;
sort (p+1,p+n+1,cmpy);
for (i=1;i<=n;i++)
}buildy(1,1,toty);
sort (p+1,p+n+1,cmpid);
long long ansx=0;
long long ansy=0;
for (i=1;i<=n;i++)
cout<然後就廢了,調兩個雙線段樹的**確實很耗費精力,加上上午上完數學物理方程課過來的,就覺得頭很疼。
2023年9月29日開學訓練日記
今天早上學了一下字典樹和0 1字典樹,因為之前周四的比賽中我用暴力過了乙個0 1字典樹的題,想順便學習 補題 我只能說字典樹是乙個比較好用的資料結構,並不是乙個很嚇人的知識點,就是用乙個樹存某個串的狀態,以達到節省空間又能快速訪問多個字串的狀態量的乙個資料結構。0 1字典樹則是乙個特例,是對數字的異...
2023年9月9日訓練日記
這段時間主要看了饒齊部落格的揹包部分和cf題解的前幾道題。然後就是昨天今天兩場網路賽。這兩場網路賽都沒出線,乙個最明顯的感覺就是,為啥別人都會就我們不會?還是和多校的問題一樣。要麼就是簡單的模板題,但是知識點不會 但是現在基本已經解決 另外乙個重要的問題就是題目不難,但是不會。思考原因 1 題量不夠...
2023年9月2日訓練日記
這段時間複習了數字dp的有關內容。之前做過的比較難的題目有一些看不懂了。簡單的題目還是可以看懂的。主要是dp的每一維表示什麼,是否有前導零等條件。經常結合二分使用,求第k個每一數字滿足什麼條件的數這樣的。不過還是只會dfs寫法,普通的for迴圈dp還是只能看懂一小部分。icpc南京網路賽可以說打的不...