結果
問題 | No.610 区間賞(Section Award) |
ユーザー |
|
提出日時 | 2018-01-01 19:06:27 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 214 ms / 2,000 ms |
コード長 | 1,804 bytes |
コンパイル時間 | 1,769 ms |
コンパイル使用メモリ | 186,300 KB |
実行使用メモリ | 10,880 KB |
最終ジャッジ日時 | 2024-12-22 23:50:22 |
合計ジャッジ時間 | 5,496 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 50 |
ソースコード
#include "bits/stdc++.h"using namespace std;#define FOR(i,j,k) for(int (i)=(j);(i)<(int)(k);++(i))#define rep(i,j) FOR(i,0,j)#define each(x,y) for(auto &(x):(y))#define mp make_pair#define mt make_tuple#define all(x) (x).begin(),(x).end()#define debug(x) cout<<#x<<": "<<(x)<<endl#define smax(x,y) (x)=max((x),(y))#define smin(x,y) (x)=min((x),(y))#define MEM(x,y) memset((x),(y),sizeof (x))#define sz(x) (int)(x).size()#define pb push_backtypedef long long ll;typedef pair<int, int> pii;typedef vector<int> vi;typedef vector<ll> vll;template<class Val>struct BinaryIndexedTree {int n;vector<Val> t;BinaryIndexedTree() {}BinaryIndexedTree(int _n) :n(_n + 1), t(_n + 1) {}void add(int k, Val val) {k++;while (k < n) {t[k] += val;k += (k&-k);}}void set(int k, Val val) {add(k, -sum(k, k + 1));add(k, val);}Val sum(int k) {Val r = 0;while (k > 0) {r += t[k];k -= (k&-k);}return r;}Val sum(int l, int r) {return sum(r) - sum(l);}};typedef BinaryIndexedTree<int> BIT;typedef tuple<int, int, int> T;int N, A[100005], B[100005], p[100005], q[100005];int main(){ios::sync_with_stdio(false);cin.tie(0);cin >> N;rep(i, N)cin >> A[i];rep(i, N)cin >> B[i];rep(i, N) {p[A[i] - 1] = i;q[B[i] - 1] = i;}vector<T> U(N);rep(i, N) {U[i] = make_tuple(p[i], q[i], i + 1);}sort(U.rbegin(), U.rend());set<int> ans;BIT bit(N);rep(i, N) {int a, b, k;tie(a, b, k) = U[i];if (bit.sum(b) == 0)ans.insert(k);bit.add(b, 1);}each(x, ans)cout << x << endl;}