結果
問題 | No.743 Segments on a Polygon |
ユーザー |
![]() |
提出日時 | 2018-10-11 17:05:10 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 46 ms / 2,000 ms |
コード長 | 2,085 bytes |
コンパイル時間 | 1,102 ms |
コンパイル使用メモリ | 101,984 KB |
実行使用メモリ | 10,048 KB |
最終ジャッジ日時 | 2024-11-14 12:40:28 |
合計ジャッジ時間 | 2,320 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 10 |
ソースコード
#include<iostream>#include<vector>#include<queue>#include<stack>#include<string>#include<cmath>#include<algorithm>#include<bitset>#include<map>#include<functional>#include<set>#include<numeric>#pragma regionusing namespace std;#define FOR(i,r,n) for(ll i = (ll)(r); i < (ll)(n); i++)#define rep(i,n) FOR(i,0LL,n)#define RFOR(i,r,n) for(ll i=(ll)(n-1);i>=r;i--)#define rrep(i,n) RFOR(i,0LL,n)#define all(x) x.begin(),x.end()#define rall(x) x.rbegin(),x.rend()#define COUNT(a,y,x) upper_bound(all(a), y) - lower_bound(all(a), x)#define UNIQUE(a) sort(all(a)); a.erase(unique(all(a)), a.end())#define SUM(a) accumulate(all(a),0LL)#define scan(x) scanf("%lld",&x)#define print(x) printf("%lld\n",x)#define print2(x) printf("%lld ",x)#define pb push_backtypedef long long int ll;typedef vector<ll> vll;typedef vector<vll> vvll;typedef pair<ll, ll> pll;typedef vector<pll> vpll;typedef vector<string> vs;typedef map<ll, ll> MAP;const ll inf = 2222222222222222222LL;const ll mod = 1000000007LL;ll n = 0, m = 0, ans = 0, cnt = 0, tmp = 0, ma = -inf, mi = inf;string s;bool ok = true, flag = false;ll dx[5] = { 1,-1,0,0,0 }, dy[5] = { 0,0,1,-1,0 };ll ddx[9] = { 1,-1,0,0,1,1,-1,-1,0 }, ddy[9] = { 0,0,1,-1,1,-1,1,-1,0 };#pragma endregion#define MAX 222222struct BinaryIndexed {ll num;vll bit;BinaryIndexed(ll x = MAX) {num = x;bit.resize(x + 1, 0);}ll sum(ll i) {ll ret = 0;while (i > 0) {ret += bit[i];i -= i & -i;}return ret;}void add(ll i, ll x) {if (i == 0) cout << "access 0 index" << endl;while (i <= num) {bit[i] += x;i += i & -i;}}};ll x[MAX * 2];int main(void) {BinaryIndexed b;vpll v;cin >> n >> m;rep(i, n) {pll p;scan(tmp); p.first = tmp;scan(tmp); p.second = tmp;if (p.first > p.second) swap(p.first,p.second);v.pb(p);}sort(all(v));ll cur = 0;rep(i, n) {FOR(j, cur, v[i].first) if (x[j]) b.add(j, -1);ans += b.sum(v[i].second);b.add(v[i].second, 1);x[v[i].second]++;cur = v[i].first;}cout << ans << endl;return 0;}