codeforces 1140 F(時間線段樹)

2021-09-27 10:38:59 字數 1615 閱讀 2890

思路:時間線段樹部分挺裸的,乙個點能把行和列連線在一起,那麼答案就是每個聯通快裡面行的個數乘上列的個數,把行和列看成點的思想好像挺常見的,網路流建圖什麼的也可以經常可以看見這種思想,紀錄一下

#pragma gcc optimize(3)

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;

typedef long long ll;

typedef unsigned long long ull;

const ll inff = 0x3f3f3f3f3f3f3f3f;

#define for(i,a,b) for(int i(a);i<=(b);++i)

#define fol(i,a,b) for(int i(a);i>=(b);--i)

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

#define inf int(0x3f3f3f3f)

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

#define sl(a) scanf("%lld",&a)

#define sd(a) scanf("%lf",&a)

#define ss(a) scanf("%s",a)

#define mod ll(1000)

#define pb push_back

#define eps 1e-8

#define lc d<<1

#define rc d<<1|1

#define pll pair#define p pair#define pi acos(-1)

int fa[600008],sx[600008],sy[600008],n;

ll ans=0;

int fid(int x)

unordered_mapmp[300008];

struct assa[300008];

struct astr[300008<<2];

void build(int d,int l,int r)

void add(int d,int l,int r,p pos)

int mid=(tr[d].l+tr[d].r)>>1;

if(mid>=r) add(lc,l,r,pos);

else if(l>mid) add(rc,l,r,pos);

else add(lc,l,mid,pos),add(rc,mid+1,r,pos);

}void query(int d)

st.clear();

}int main()

mp[a[i].x][a[i].y]=i;

}for(i,1,n) if(mp[a[i].x][a[i].y]) add(1,mp[a[i].x][a[i].y],n,p(a[i].x,a[i].y+300000));

query(1);puts("");

return 0;

}

codeforces 1194F 組合數學

傳送門 你有n個事件,你需要按照1 n的順序完成這些事件,每個事件需要 t i 的時間完成,你現在一共有t的時間去做這些事情,每做一件事情的時候,你有0.5的概率花費 t i 的時間完成他,也有0.5的概率花費 t i 1 的時間去完成他,如果在做這個事件的時候時間花完了,你就相當於沒有做成這個事件...

codeforces 1114F 線段樹練習

這是一道用線段樹維區間值的一道題,題意很簡單,就是對於給定的乙個序列,初始時每個數的值不大於300,然後有兩中操作,乙個是對區間 l,r 的每個數乘上以個數x,乙個是詢問區間的乘積的尤拉函式值,首先對於第乙個操作顯然可以用線段樹的延遲更新來完成,對於第二個操作,我最先沒考慮資料,就想著直接維護區間的...

Codeforces 985F 字串雜湊

題目鏈結 題意簡述 給定乙個長度為n n 2e5 的字串s 僅含有小寫字母 有m m 2e5 次查詢。每次查詢給三個數,x,y,len,求在s x s x len 1 和s y s y len 1 是否存在相應位置唯一對應關係。例如aba和brb,aaa和kkk,abs和ert是唯一對應。aab和a...