<?xml version="1.0" encoding="UTF-8" ?><rdf:RDF 
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:lang="ja">
  <channel rdf:about="http://w.atwiki.jp/kyopro-lib/">
    <title>競プロライブラリ</title>
    <link>http://w.atwiki.jp/kyopro-lib/</link>
    <atom:link href="https://w.atwiki.jp/kyopro-lib/rss10.xml" rel="self" type="application/rss+xml" />
    <atom:link rel="hub" href="https://pubsubhubbub.appspot.com" />
    <description>競プロライブラリ</description>

    <dc:language>ja</dc:language>
    <dc:date>2018-02-13T23:44:56+09:00</dc:date>
    <utime>1518533096</utime>

    <items>
      <rdf:Seq>
                <rdf:li rdf:resource="https://w.atwiki.jp/kyopro-lib/pages/2.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kyopro-lib/pages/12.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kyopro-lib/pages/15.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kyopro-lib/pages/14.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kyopro-lib/pages/13.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kyopro-lib/pages/1.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kyopro-lib/pages/3.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kyopro-lib/pages/4.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kyopro-lib/pages/5.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kyopro-lib/pages/6.html" />
              </rdf:Seq>
    </items>
	
		
    
  </channel>
    <item rdf:about="https://w.atwiki.jp/kyopro-lib/pages/2.html">
    <title>メニュー</title>
    <link>https://w.atwiki.jp/kyopro-lib/pages/2.html</link>
    <description>
      **メニュー
#region(データ構造)
- [[UnionFind]]
- [[部分永続UnionFind]]
- [[BIT]]
- [[segment]]
- [[遅延セグメントツリー]]
- 永続セグメントツリー
- treap
- bit列のtrie木
- EERTREE
#endregion
#region(グラフ)
- [[LCA]]
- [[toporojikaru]]
- [[gridbfs]]
- [[graphbfs]]
- [[griddfs]]
- [[dijkstra]]
- [[scc]]
- [[ford fulkerson]]
- [[dinic]]
- [[mincostflow_dijkstra]]
- [[bipartite_matching]]
- [[mincostflow_belman]]
- [[independent_set]]
- [[toporojikaru_dfs]]
#endregion
#region(数学)
- [[matrix]]
- [[matrixpow]]
- [[erasutotenesu]]
- [[pascal]]
- [[combination]]
- [[root]]
- [[extgcd]]
- [[crt]]
- [[extLucas]]
- [[matrix]]
#endregion
#region(文字列)
- [[koubun]]
- [[zalgorithm]]
- [[rollingHash]]
- [[stringSplit]]
#endregion
#region(典型問題系)
- [[chinese_postman]]
- [[Edit_Distance]]
- [[largest-Rectangle_histogram]]
- [[largest-Rectangle]]
- [[limit_knapsack]]
#endregion
#region(便利系)
- [[binary pow]]
- [[BigNum]]
- [[ModInt]]
- [[interactive]]
- [[ruisekiwa]]
- [[compress]]
#endregion
#region(その他)
- [[template]]
- [[parallelBinarySearch]]
- [[convexhulltrick]]
- [[dice]]
#endregion
----

**リンク
-[[@wiki&gt;&gt;http://atwiki.jp]]
-[[@wikiご利用ガイド&gt;&gt;http://atwiki.jp/guide/]]

// リンクを張るには &quot;[&quot; 2つで文字列を括ります。
// &quot;&gt;&quot; の左側に文字、右側にURLを記述するとリンクになります


//**更新履歴
//#recent(20)

&amp;link_editmenu(text=ここを編集)    </description>
    <dc:date>2018-02-13T23:44:56+09:00</dc:date>
    <utime>1518533096</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kyopro-lib/pages/12.html">
    <title>BIT</title>
    <link>https://w.atwiki.jp/kyopro-lib/pages/12.html</link>
    <description>
      *BinaryIndexedTree
点更新と区間[0,i)に対するクエリをそれぞれO(logN)でできるデータ構造
i&amp;-iでiで1の最下位bitが取得できるのをつかって実装
単位元と更新クエリ、区間クエリに使う式を指定する
デフォルト引数のまま使うとよくある和を求めるBIT
[[わかりやすいスライド&gt;http://hos.ac/slides/20140319_bit.pdf]]

#highlight(linenumber,cpp){{
// Binary Indexed Tree
// 0-indexed
template &lt;typename T&gt;
class BIT {
private:
  vector&lt;T&gt; bit;
  // 単位元
  int neutral = 0;
  // 更新クエリ, 区間クエリ
  function&lt;T(T,T)&gt; f = [](const T l, const T r) { return l+r; };
  function&lt;T(T,T)&gt; g = [](const T l, const T r) { return l+r; };
public:
  // 初期化
  BIT(int neu = 0,
    function&lt;T(T,T)&gt; _f = [](const T l, const T r) { return l+r; },
    function&lt;T(T,T)&gt; _g = [](const T l, const T r) { return l+r; },
    int n = 1e5)
  {
    init(neu, _f, _g, n);
  }
  void init(int neu = 0,
    function&lt;T(T,T)&gt; _f = [](const T l, const T r) { return l+r; },
    function&lt;T(T,T)&gt; _g = [](const T l, const T r) { return l+r; },
    int n = 1e5)
  {
    neutral = neu; f = _f; g = _g;
    bit.assign(n+5, neutral);
  }
  // iに対する点更新クエリ
  void update(int i, T w) {
    for(int x = i+1; x &lt; bit.size(); x += x&amp;-x) bit[x] = f(bit[x], w);
  }
  // [0,i)に対する区間クエリ
  T query(int i) {
    T ret = neutral;
    for(int x = i+1; x &gt; 0; x -= x &amp; -x) ret = g(ret, bit[x]);
    return ret;
  }
};}}

**転倒数
バブルソートの交換回数⇔i&lt;j,a[i]&gt;a[j]であるような(i,j)の組
i番目より前でa[i]より大きい数の個数を求めたい
BITでa[i]の個数をもっておいて足していけばよい
動的累積和みたいな気持ち
https://chokudai_s001.contest.atcoder.jp/tasks/chokudai_S001_j

直線の交点の数とかを転倒数に落とせる atcoderのどこかで見た

**集合のX番目の数
転倒数と同じくa[i]の個数を持っておく
[0,val)の個数がO(logN)で求まるので二分探索を使えばX番目の数が求まる
N&lt;=10^5,a[i]&lt;=10^9みたいなときも要素の値が関係なく大小関係だけ気にすればいいので座標圧縮をすればok
[[https://arc033.contest.atcoder.jp/tasks/arc033_3]]

**区間加算クエリ
差分を取ると区間加算が2点加算になることを使う
BITを2本もつ

**2次元BIT
蟻本p162    </description>
    <dc:date>2018-02-13T22:24:57+09:00</dc:date>
    <utime>1518528297</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kyopro-lib/pages/15.html">
    <title>遅延セグメントツリー</title>
    <link>https://w.atwiki.jp/kyopro-lib/pages/15.html</link>
    <description>
      http://tsutaj.hatenablog.com/entry/2017/03/30/224339

AOJのDSLでverify
ToDo:抽象化した実装、動的構築
http://beet-aizu.hatenablog.com/entry/2017/12/01/225955
https://tomcatowl.github.io/post/ds-and-alg-1/
http://d.hatena.ne.jp/DEGwer/20131211/1386757368

*区間更新区間最小
遅延セグ木で区間に対しての更新に対応

#region(ソースコード)
#highlight(linenumber,cpp) {{
// 区間更新、区間最小の遅延セグメントツリー
struct RMQRUQ {
  int n;
  vector&lt;int&gt; dat, lazy;

  RMQRUQ(){}
  RMQRUQ(int n_) {
    n = 1; while(n &lt; n_) n *= 2;
    dat.assign(n*2, INT_MAX);
    lazy.assign(n*2, INT_MAX);
  }

  void eval(int len, int k) {
    if(lazy[k] == INT_MAX) return;
    if(k*2+1 &lt; n*2-1) {
      lazy[2*k+1] = lazy[k];
      lazy[2*k+2] = lazy[k];
    }
    dat[k] = lazy[k];
    lazy[k] = INT_MAX;
  }

  // [a, b)
  ll update(int a, int b, ll x, int k, int l, int r) {
    eval(r-l, k);
    if(b &lt;= l || r &lt;= a) return dat[k];
    if(a &lt;= l &amp;&amp; r &lt;= b) {
      lazy[k] = x;
      return lazy[k];
    }
    return dat[k] = min(update(a, b, x, 2*k+1, l, (l+r)/2), update(a, b, x, 2*k+2, (l+r)/2, r));
  }
  ll update(int a, int b, ll x) { return update(a, b, x, 0, 0, n); }

  // [a, b)
  ll query(int a, int b, int k, int l, int r) {
    eval(r-l, k);
    if(b &lt;= l || r &lt;= a) return INT_MAX;
    if(a &lt;= l &amp;&amp; r &lt;= b) return dat[k];
    ll vl = query(a, b, 2*k+1, l, (l+r)/2);
    ll vr = query(a, b, 2*k+2, (l+r)/2, r);
    return min(vl, vr);
  }
  ll query(int a, int b) { return query(a, b, 0, 0, n); }
};
}}
#endregion

* 区間加算区間和

#region(ソースコード)
#highlight(linenumber,cpp) {{
// 区間加算区間和
struct RSQRAQ {
  int n;
  vector&lt;ll&gt; dat, lazy;

  RSQRAQ(){}
  RSQRAQ(int n_) {
    n = 1; while(n &lt; n_) n *= 2;
    dat.assign(n*2, 0);
    lazy.assign(n*2, 0);
  }

  void eval(int len, int k) {
    if(lazy[k] == 0) return;
    if(k*2+1 &lt; n*2-1) {
      lazy[2*k+1] += lazy[k];
      lazy[2*k+2] += lazy[k];
    }
    dat[k] += lazy[k]*len;
    lazy[k] = 0;
  }

  // [a, b)
  ll update(int a, int b, ll x, int k, int l, int r) {
    eval(r-l, k);
    if(b &lt;= l || r &lt;= a) return dat[k];
    if(a &lt;= l &amp;&amp; r &lt;= b) {
      lazy[k] += x;
      return dat[k] + lazy[k]*(r-l);
    }
    return dat[k] = update(a, b, x, 2*k+1, l, (l+r)/2) + update(a, b, x, 2*k+2, (l+r)/2, r);
  }
  ll update(int a, int b, ll x) { return update(a, b, x, 0, 0, n); }

  // [a, b)
  ll query(int a, int b, int k, int l, int r) {
    eval(r-l, k);
    if(b &lt;= l || r &lt;= a) return 0;
    if(a &lt;= l &amp;&amp; r &lt;= b) return dat[k];
    ll vl = query(a, b, 2*k+1, l, (l+r)/2);
    ll vr = query(a, b, 2*k+2, (l+r)/2, r);
    return vl + vr;
  }
  ll query(int a, int b) { return query(a, b, 0, 0, n); }
}; }}
#endregion

* starrysky木

#region(ソースコード)
#highlight(linenumber,cpp) {{
// 区間加算、区間最大のstarrysky木
struct starrysky {
  int n;
  const int init_ = 0;
  VI lazym, lazya;
  starrysky(){}
  starrysky(int n_) {init(n_);}
  void init(int n_) {
    n = 1; while(n&lt;n_) n *= 2;
    lazym.assign(2*n-1, init_);
    lazya.assign(2*n-1, 0);
  }
  // [a, b)
  void add(int a, int b, int x) {add(a, b, x, 0, 0, n);}
  void add(int a, int b, int x, int k, int l, int r) {
    if(r &lt;= a || b &lt;= l) return;
    if(a &lt;= l &amp;&amp; r &lt;= b) lazya[k] += x;
    else {
      add(a, b, x, k*2+1, l, (l+r)/2);
      add(a, b, x, k*2+2, (l+r)/2, r);
      lazym[k] = max(lazym[k*2+1]+lazya[k*2+1],
                      lazym[k*2+2]+lazya[k+2+2]);
    }
  }
  // [a, b)
  int query(int a, int b) {return query(a, b, 0, 0, n);}
  int query(int a, int b, int k, int l, int r) {
    if(r &lt;= a || b &lt;= l) return init_;
    if(a &lt;= l &amp;&amp; r &lt;= b) return lazym[k] + lazya[k];
    int vl = query(a, b, k*2+1, l, (l+r)/2),
        vr = query(a, b, k*2+2, (l+r)/2, r);
    return max(vl, vr)+lazya[k];
  }
};
}}
#endregion    </description>
    <dc:date>2018-02-13T22:23:58+09:00</dc:date>
    <utime>1518528238</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kyopro-lib/pages/14.html">
    <title>segment</title>
    <link>https://w.atwiki.jp/kyopro-lib/pages/14.html</link>
    <description>
      *segment木
点更新と区間[a,b)に対するクエリがO(logN)でできる
[[http://tubo28.me/algorithm/segtree_monoids/]]
[[http://beet-aizu.hatenablog.com/entry/2017/09/10/132258]]

#region(ソースコード)
#highlight(linenumber,cpp){{
template &lt;typename monoid&gt;
class segmentTree {
public:
  using M = monoid;
  using T = typename M::value_type;

  int sz;
  vector&lt;T&gt; x;

  segmentTree(int n = 1e5) {
    sz = 1; while(sz &lt; n) sz *= 2;
    init();
  }
  void init() { x.assign(sz*2, M::id()); }

  // [a, b)
  T query(int a, int b, int k, int l, int r) {
    if(r &lt;= a || b &lt;= l) return M::id();
    if(a &lt;= l &amp;&amp; r &lt;= b) return x[k];
    return M::f(query(a, b, 2*k+1, l, (l+r)/2),
                query(a, b, 2*k+2, (l+r)/2, r));
  }
  T query(int a, int b) {return query(a, b, 0, 0, sz);}
  // 点更新
  void update(int i, const T &amp;val) {
    i += sz-1;
    x[i] = M::g(x[i], val);
    while(i &gt; 0) {
      i = (i-1) / 2;
      x[i] = M::f(x[i*2+1], x[i*2+2]);
    }
  }
};

template &lt;typename T&gt;
struct min_monoid {
  using value_type = T;
  static constexpr T id() { return std::numeric_limits&lt;T&gt;::max(); }
  static T f(const T &amp;a, const T &amp;b) { return min(a, b); }
  static T g(const T &amp;a, const T &amp;b) { return b; }
};
template &lt;typename T&gt;
struct max_monoid {
  using value_type = T;
  static constexpr T id() { return std::numeric_limits&lt;T&gt;::min; }
  static T f(const T &amp;a, const T &amp;b) { return max(a, b); }
  static T g(const T &amp;a, const T &amp;b) { return b; }
};
template &lt;typename T&gt;
struct sum_monoid {
  using value_type = T;
  static constexpr T id() {return 0;}
  static T f(const T &amp;a, const T &amp;b) { return a+b; }
  static T g(const T &amp;a, const T &amp;b) { return a+b; }
};

template &lt;typename T&gt;
using rmq = segmentTree&lt;min_monoid&lt;T&gt;&gt;;
template &lt;typename T&gt;
using rsq = segmentTree&lt;sum_monoid&lt;T&gt;&gt;;
}}
#endregion    </description>
    <dc:date>2018-02-13T20:12:27+09:00</dc:date>
    <utime>1518520347</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kyopro-lib/pages/13.html">
    <title>部分永続UnionFind</title>
    <link>https://w.atwiki.jp/kyopro-lib/pages/13.html</link>
    <description>
      *部分永続UnionFind
t回目までのuniteクエリでx,yが同じ連結成分にいるかどうかを求められる
uniteがO(logN)、findがO(logN)
[[参考ページ&gt;https://camypaper.bitbucket.io/2016/12/18/adc2016/]]

#highlight(linenumber,cpp){{
// find:O(logN) unite:O(logN)
class persistentUF {
public:
  const static int MAX_N = 100010;
  unordered_map&lt;int, int&gt; par[MAX_N];
  int rank[MAX_N];
  int fin[MAX_N];
  int idx;

  persistentUF() { init(); }
  void init() {
    idx = 0;
    REP(i, MAX_N) par[i][0] = i, rank[i] = 1, fin[i] = 0;
  }
  persistentUF(int n) { init(n); }
  void init(int n) {
    idx = 0;
    REP(i, n) par[i][0] = i, rank[i] = 1, fin[i] = 0;
  }

  int find(int x, int t) {
    if(t &gt;= fin[x] &amp;&amp; par[x][fin[x]] != x) return find(par[x][fin[x]], t);
    return x;
  }

  void unite(int x, int y) {
    x = find(x, idx);
    y = find(y, idx);
    idx++;
    if(x == y) return;
    if(rank[x] &lt; rank[y]) par[x][idx] = y, fin[x] = idx;
    else {
      par[y][idx] = x, fin[y] = idx;
      if(rank[x] == rank[y]) rank[x]++;
    }
  }

  bool same(int x, int y, int t) { return find(x, t) == find(y, t); }
};
persistentUF uf;}}    </description>
    <dc:date>2018-02-13T18:48:41+09:00</dc:date>
    <utime>1518515321</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kyopro-lib/pages/1.html">
    <title>トップページ</title>
    <link>https://w.atwiki.jp/kyopro-lib/pages/1.html</link>
    <description>
      **@wikiへようこそ
-ウィキはみんなで気軽にホームページ編集できるツールです。
-このページは自由に編集することができます。
-メールで送られてきたパスワードを用いてログインすることで、各種変更（サイト名、トップページ、メンバー管理、サイドページ、デザイン、ページ管理、等）することができます

**まずはこちらをご覧ください。
-[[@wikiの基本操作&gt;&gt;http://www1.atwiki.jp/guide/pages/11.html]]
-[[編集モード・構文一覧表&gt;&gt;http://www1.atwiki.jp/guide/pages/137.html]]
-[[@wikiの設定・管理&gt;&gt;http://www1.atwiki.jp/guide/pages/36.html]]

**分からないことは？
-[[@wiki ご利用ガイド&gt;&gt;http://atwiki.jp/guide/]]
-[[よくある質問&gt;&gt;http://www1.atwiki.jp/guide/pages/21.html]]
-[[@wiki更新情報&gt;&gt;http://www1.atwiki.jp/guide/pages/143.html]]
-[[@wikiへのお問合せフォーム&gt;&gt;https://atwiki.zendesk.com/hc/ja]]
等をご活用ください

**[[アットウィキモードでの編集方法&gt;&gt;http://www1.atwiki.jp/guide/pages/226.html#id_6861418f]]
-[[文字入力&gt;&gt;http://www1.atwiki.jp/guide/pages/228.html]]
-[[画像入力&gt;&gt;http://www1.atwiki.jp/guide/pages/230.html]]
-[[表組み&gt;&gt;http://www1.atwiki.jp/guide/pages/914.html]]

**[[ワープロモードでの編集方法&gt;&gt;http://www1.atwiki.jp/guide/pages/226.html#id_a14c0938]]
-[[文字入力&gt;&gt;http://www1.atwiki.jp/guide/pages/2644.html]]
-[[画像入力&gt;&gt;http://www1.atwiki.jp/guide/pages/2645.html]]
-[[表組み&gt;&gt;http://www1.atwiki.jp/guide/pages/2646.html]]

**その他にもいろいろな機能満載！！
-[[@wikiプラグイン一覧&gt;&gt;http://www1.atwiki.jp/guide/pages/264.html]]
-[[@wikiかんたんプラグイン入力サポート&gt;&gt;http://www1.atwiki.jp/guide/pages/648.html]]

**他のWIKIが気になる方はこちら
-[[VIPで初心者がゲーム実況するには@ Wiki&gt;&gt;https://www18.atwiki.jp/live2ch/]]
-[[VPVP wiki&gt;&gt;https://www6.atwiki.jp/vpvpwiki/]]
-[[エルプリ攻略wiki&gt;&gt;https://www65.atwiki.jp/erupri/]]
-[[プログラミングに関する私的メモ&gt;&gt;https://www46.atwiki.jp/gen3/]]
-[[ハートオブクラウン@wiki&gt;&gt;https://www49.atwiki.jp/hatokura/]]

**バグ・不具合を見つけたら？ 要望がある場合は？
お手数ですが、[[お問合せフォーム&gt;&gt;https://atwiki.zendesk.com/hc/ja]]からご連絡ください。
    </description>
    <dc:date>2018-02-13T17:58:24+09:00</dc:date>
    <utime>1518512304</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kyopro-lib/pages/3.html">
    <title>右メニュー</title>
    <link>https://w.atwiki.jp/kyopro-lib/pages/3.html</link>
    <description>
      **更新履歴
#recent(20)


&amp;link_editmenu2(text=ここを編集)
    </description>
    <dc:date>2018-02-13T17:58:24+09:00</dc:date>
    <utime>1518512304</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kyopro-lib/pages/4.html">
    <title>プラグイン/ニュース</title>
    <link>https://w.atwiki.jp/kyopro-lib/pages/4.html</link>
    <description>
      * ニュース
@wikiのwikiモードでは
 #news(興味のある単語)
と入力することで、あるキーワードに関連するニュース一覧を表示することができます
詳しくはこちらをご覧ください。
＝＞http://www1.atwiki.jp/guide/pages/266.html#id_542badf7


-----


たとえば、#news(ゲーム)と入力すると以下のように表示されます。


#news(ゲーム)
    </description>
    <dc:date>2018-02-13T17:58:24+09:00</dc:date>
    <utime>1518512304</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kyopro-lib/pages/5.html">
    <title>プラグイン/編集履歴</title>
    <link>https://w.atwiki.jp/kyopro-lib/pages/5.html</link>
    <description>
      * 更新履歴
@wikiのwikiモードでは
 #recent(数字)
と入力することで、wikiのページ更新履歴を表示することができます。
詳しくはこちらをご覧ください。
＝＞http://www1.atwiki.jp/guide/pages/269.html#id_bf9eaeba


-----


たとえば、#recent(20)と入力すると以下のように表示されます。


#recent(20)
    </description>
    <dc:date>2018-02-13T17:58:24+09:00</dc:date>
    <utime>1518512304</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kyopro-lib/pages/6.html">
    <title>プラグイン/アーカイブ</title>
    <link>https://w.atwiki.jp/kyopro-lib/pages/6.html</link>
    <description>
      * アーカイブ
@wikiのwikiモードでは
 #archive_log()
と入力することで、特定のウェブページを保存しておくことができます。
詳しくはこちらをご覧ください。
＝＞http://www1.atwiki.jp/guide/pages/921.html#id_2d967d6e


-----


たとえば、#archive_log()と入力すると以下のように表示されます。
保存したいURLとサイト名を入力して&quot;アーカイブログ&quot;をクリックしてみよう


#archive_log()
    </description>
    <dc:date>2018-02-13T17:58:24+09:00</dc:date>
    <utime>1518512304</utime>
  </item>
  </rdf:RDF>
