# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
209463 | 2020-03-14T09:53:47 Z | TAISA_ | Bubble Sort 2 (JOI18_bubblesort2) | C++14 | 0 ms | 0 KB |
#include <bits/stdc++.h> #define eb emplace_back #define all(v) v.begin(),v.end() using namespace std; using ll=long long; using D=long double; using P=pair<ll,ll>; struct BIT{ vector<int> bit; BIT(int n){ bit.resize(++n); } void add(int k,int x){ for(++k;k<bit.size();k+=k&-k){ bit[k]+=x; } } int get(int k){ int res=0; for(++k;k>0;k-=k&-k){ res+=bit[k]; } return res; } }; vector<int> countScans(vector<int> A,vector<int> X,vector<int> V){ int n=A.size(),q=X.size(); assert(n<=2000&&q<=2000); vector<int> v; for(int i=0;i<n;i++){ v.eb(A[i]); } for(int i=0;i<q;i++){ v.eb(V[i]); } sort(all(v)); v.erase(unique(all(v)),v.end()); int m=v.size(); for(int i=0;i<n;i++){ A[i]=lower_bound(all(v),A[i])-v.begin(); } vector<int> res(q); for(int i=0;i<q;i++){ V[i]=lower_bound(all(v),V[i])-v.begin(); A[X[i]]=Y[i]; BIT bit(m+5); for(int j=0;j<n;j++){ res[i]=max(res[i],bit.get(m+1)-bit.get(A[j])); } } return res; }