제출 #1139785

#제출 시각아이디문제언어결과실행 시간메모리
1139785AmirMakaMArranging Shoes (IOI19_shoes)C++20
45 / 100
114 ms12364 KiB
#include <bits/stdc++.h> #include "shoes.h" using namespace std; #define ull unsigned long long #define ll long long #define ld long double #define pb push_back #define f first #define s second #define sz(x) (int)x.size() #define all(x) x.begin(),x.end() #define pii pair<int,int> #define pll pair<ll,ll> #define pld pair<ld,ld> #define pdd pair<double,double> #define mp make_pair #define AmirMakaM ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0) // solve it const ull SEED = chrono::steady_clock::now().time_since_epoch().count(); mt19937_64 mrand(SEED); ull rnd(ull x = ~(0ull)) {return mrand() % x;} const ll MOD = 998244353; const ll INF = 1e16+20; const int inf = 1e9 + 7; const ll N = 2e5+1; const ll M = 2e3+1; const double pi = 2*acos(0.0); const int dx[] = {1,-1,0,0}, dy[] = {0,0,1,-1}; ll n, a[N], t[4*N]; void upd(int v, int tl, int tr, int pos, int x) { if(tl == tr) { t[v] = x; return; } int tm=(tl+tr)>>1; if(pos<=tm) upd(v+v,tl,tm,pos,x); else upd(v+v+1,tm+1,tr,pos,x); t[v] = t[v+v] + t[v+v+1]; } ll get(int v, int tl, int tr, int l, int r) { if(r < tl || tr < l) return 0; else if(l <= tl && tr <= r) return t[v]; int tm = (tl+tr)>>1; return get(v+v,tl,tm,l,r)+get(v+v+1,tm+1,tr,l,r); } ll count_swaps(vector<int> s) { n = sz(s); for(int i=1; i<=n; i++) a[i] = s[i-1], upd(1,1,n,i,1); set<pii> l; for(int i=1; i<=n; i++) { if(a[i] < 0) l.insert({-a[i],i}); } ll ans = 0; for(int i=n; i>=1; i--) { if(a[i] < 0) continue; auto it = l.lower_bound({a[i],n+1}); it--; l.erase(it); ans += get(1,1,n,i+1,n); upd(1,1,n,i,0); ans += get(1,1,n,(*it).s+1,n); upd(1,1,n,(*it).s,0); } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...