結果
問題 | No.1115 二つの数列 / Two Sequences |
ユーザー |
|
提出日時 | 2020-07-21 23:04:59 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 27 ms / 2,000 ms |
コード長 | 2,428 bytes |
コンパイル時間 | 1,733 ms |
コンパイル使用メモリ | 170,364 KB |
実行使用メモリ | 6,824 KB |
最終ジャッジ日時 | 2024-12-31 12:56:27 |
合計ジャッジ時間 | 4,537 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 5 |
other | AC * 35 |
ソースコード
#include <bits/stdc++.h>using namespace std;#define REP(i,m,n) for(int i=(m); i<(int)(n); i++)#define RREP(i,m,n) for(int i=(int)((n)-1); i>=m; i--)#define rep(i,n) REP(i,0,n)#define rrep(i,n) RREP(i,0,n)#define all(a) (a).begin(),(a).end()#define rall(a) (a).rbegin(),(a).rend()#define fi first#define se second#define debug(...) {cerr<<"[L"<<__LINE__<<"] "; _debug(__VA_ARGS__);}template<typename T>string join(const vector<T>&v, string del=", "){ stringstream s;for(auto x : v) s << del << x; return s.str().substr(del.size());}template<typename T>ostream& operator<<(ostream& o, const vector<T>&v){if(v.size()) o << "[" << join(v) << "]"; return o;}template<typename T>ostream& operator<<(ostream& o, const vector<vector<T> >&vv){int l = vv.size();if(l){ o<<endl; rep(i,l) o << (i==0 ? "[ " : ",\n " ) << vv[i] << (i==l-1 ? " ]" : ""); }return o;}template<typename T1, typename T2>ostream& operator<<(ostream& o, const pair<T1, T2>& p){return o << "(" << p.first << ", " << p.second << ")";}inline void _debug(){cerr<<endl;}template<class First, class... Rest>void _debug(const First& first, const Rest&... rest){cerr<<first<<" ";_debug(rest...);}typedef long long ll;typedef pair<int, int> pii;typedef pair<ll, ll> pll;typedef vector<int> vi;typedef vector<vi> vvi;typedef vector<ll> vl;typedef vector<vl> vvl;const double PI = (1*acos(0.0));const double EPS = 1e-9;const int INF = 0x3f3f3f3f;const ll INFL = 0x3f3f3f3f3f3f3f3fLL;const ll mod = 1e9 + 7;inline void finput(string filename) {freopen(filename.c_str(), "r", stdin);}template<typename T>struct BIT{int n;vector<T> dat;BIT(int n) : n(n), dat(n+1,0){}void add(int x, T val){for(int i = x+1; i <= n; i += (i & -i)) dat[i] += val;}T sum(int x){T ret = 0;for(int i = x+1; i > 0; i -= (i & -i)) ret += dat[i];return ret;}T sum(int a, int b){return sum(b) - sum(a-1);}};int main(){ios_base::sync_with_stdio(0);// finput("./input");int n; cin >> n;vi aidx(n), b(n);rep(i,n){int a; cin >> a;aidx[a-1] = i;}rep(i,n){int bi; cin >> bi;b[i] = aidx[bi-1];}ll ans = 0;auto bit = BIT<ll>(n);rep(i,n){ans += bit.sum(b[i],n-1);bit.add(b[i], 1);}cout << ans << endl;return 0;}