liaoliao的四連做第二彈

2022-05-12 16:08:38 字數 3181 閱讀 5879

liaoliao四連做第一彈

由於$10^9$以內的數最多只會被開方$10$次,所以我們可以用線段樹維護然後剪枝..

#include #include #include #include #include #define ll long long

using namespace std;

const ll maxn = 100010;

ll p[maxn][31], nochange[maxn][31];

ll sum[maxn*4], la[maxn*4]; bool isone[maxn*4];

ll n, m;

void bulid_tree ( ll now, ll l, ll r )

else

}void push_down ( ll now, ll l, ll r )

}void change ( ll now, ll l, ll r, ll l, ll r )

push_down ( now, l, r );

ll mid = ( l + r ) >> 1, lc = now*2, rc = now*2+1;

if ( r <= mid ) change ( lc, l, mid, l, r );

else if ( l > mid ) change ( rc, mid+1, r, l, r );

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

sum[now] = sum[lc]+sum[rc];

if ( la[lc] == la[rc] ) la[now] = la[lc]; else la[now] = -1;

if ( isone[lc] && isone[rc] ) isone[now] = true;

}ll query ( ll now, ll l, ll r, ll l, ll r )

int main ()

}for ( j = 0; j <= 10; j ++ )

bulid_tree ( 1, 1, n );

scanf ( "%lld", &m );

for ( i = 1; i <= m; i ++ )

else

}return 0;

}

考慮乙個貪心策略,從小到大移動,小的數肯定放兩邊(哪邊近放哪邊)

那麼對於某個數能夠影響他的也就只有比他大的數了

然後就從大到小插入然後樹狀陣列判斷一下就好了..

#include #include #include #include #define ll long long

using namespace std;

const ll maxn = 300010;

struct node list[maxn];

bool cmp ( node x, node y )

ll sum[maxn], n;

ll lowbit ( ll x )

void add ( ll x ) }

ll query ( ll x ) return ret; }

ll _min ( ll x, ll y )

int main ()

ll s = query (list[i].pos);

ans += _min ( s, num-s-1 );

}printf ( "%lld\n", ans );

return 0;

}

二分答案,然後用網路流判斷,是乙個比較經典的最小割模型..

像這種小數流量的,可以先把這個數擴大$10^6$最後再縮小..

聽說這種做法叫做分數規劃(霧)

#include #include #include #include #include #define ll long long

using namespace std;

const ll maxn = 55;

const ll maxm = 55*55;

const ll inf = 0x7fffffff;

struct node a[maxm*20]; ll first[maxm], len;

void ins ( ll x, ll y, ll c )

ll n, m;

ll st, ed, h[maxm];

ll getnum ( ll x, ll y )

ll map[maxn][maxn];

ll row[maxn][maxn], col[maxn][maxn];

ll _min ( ll x, ll y )

ll dfs ( ll x, ll flow )

}if ( delta == 0 ) h[x] = -1;

return delta;

}bool bfs ()}}

return h[ed] > 0;

}int main ()

sum *= 1e6;

for ( i = 1; i <= n+1; i ++ ) for ( j = 1; j <= m; j ++ ) scanf ( "%lld", &row[i][j] );

for ( i = 1; i <= n; i ++ ) for ( j = 1; j <= m+1; j ++ ) scanf ( "%lld", &col[i][j] );

ll l = 0, r = 100*1e6, ret;

st = 0; ed = n*m+1;

while ( l <= r )

ii = i+1; jj = j;

if ( ii >= 1 && ii <= n && jj >= 1 && jj <= m )}}

ll delta = 0;

while ( bfs () )

if ( sum-delta > 0 )

else r = mid-1;

}printf ( "%.3lf\n", (double)ret/1e6 );

return 0;

}

先找重心,因為重心肯定是剛好對應的(如果有兩個重心就新建乙個重心練到這兩個點然後再亂搞..)

那麼剩下的肯定只有是在交換子樹下才有可能同形異構..

這個東西就是乙個可重複排列..

**先挖個坑..

C Light 和 uLua的對比第二彈

上次的對比大家還有印象否,c light和ulua對比各有勝負 今天我們加入乙個去反射優化,這是ulua沒辦法實現的優化,我們也就只能不要臉的勝之不武了 以原生執行同一測試時間為x1,數字越小的越快 專案ulua c light c light 去反射優化 效能測試一 x4.5 x4.5 x2.19...

HH的項鍊 第二彈(莫隊 離線)

同樣的我們依舊進行離線並對詢問進行排序,以左端點所在塊為第一關鍵字,以右端點為第二關鍵字。這樣可以減少大幅度移動次數 我們以樣例為例 資料1 2343 5編號12 3456 塊號112 233提問 1.1,2 2.2,6 3.3,5 那麼我們就要兩個移動下標f1,f2。其實位置為0,0 隨著問題的討...

開發工具的安裝與使用(第二彈)

前一篇博文中談到python開發工具之一notepad 的安裝,今天簡要說說如何利用notepad 編輯python 並執行 在此之前,必須提醒一點,僅有notepad 只能完成 的編輯 當然它也有簡單的執行功能 要想執行 還要安裝python的 直譯器。換句話說,如果想用notepad 來學習py...