제출 #466391

#제출 시각아이디문제언어결과실행 시간메모리
466391NintsiChkhaidzeArranging Shoes (IOI19_shoes)C++14
50 / 100
1091 ms26456 KiB
#include "shoes.h" #include <vector> #include <algorithm> #define pb push_back #define ll long long #define left (h<<1),l,((l+r)>>1) #define right ((h<<1)|1),((l+r)>>1) + 1,r using namespace std; const int N = 100005; vector <int> lf[N],rg[N]; bool f[N]; ll fen[N],t[4*N],add[4*N]; pair<int,pair<int,int> > d[N]; void push(int h,int l,int r){ if (!add[h]) return; t[h*2] += add[h]*((l+r)/2 - l + 1); t[h*2 + 1] += add[h]*(r - (l+r)/2); add[h*2] += add[h]; add[h*2 + 1] += add[h]; add[h] = 0; } void upd(int h,int l,int r,int L,int R,int val){ if (r < L || R < l) return ; if (L <= l && r <= R){ t[h] += val*(r-l+1); add[h] += val; return; } push(h,l,r); upd(left,L,R,val),upd(right,L,R,val); t[h] = t[h*2] + t[h*2 + 1]; } ll get(int h,int l,int r,int idx){ if (l == r) return t[h]; push(h,l,r); if (idx > (l+r)/2) return get(right,idx); return get(left,idx); } ll count_swaps(vector <int> a) { int n = a.size(); for (int i = 0; i < a.size(); i++){ if (a[i] < 0) lf[-a[i]].pb(i); else rg[a[i]].pb(i); } ll cnt = 0; for (int i = 0; i < a.size(); i++){ if (f[i]) continue; if (a[i] < 0){ int ind = rg[-a[i]][0]; f[ind] = 1; rg[-a[i]].erase(rg[-a[i]].begin()); d[++cnt] = {abs(ind - i),{i,ind}}; lf[-a[i]].erase(lf[-a[i]].begin()); } else{ int ind = lf[a[i]][0]; f[ind] = 1; lf[a[i]].erase(lf[a[i]].begin()); d[++cnt] = {abs(ind - i),{ind,i}}; rg[a[i]].erase(rg[a[i]].begin()); } } sort(d + 1,d + cnt + 1); ll ans=0; for (int i = 1; i <= cnt; i++){ int l = d[i].second.first,r = d[i].second.second; if (l > r) swap(l,r); ans += r - l - 1 - get(1,1,n, l + 1) - get(1,1,n,r + 1); if (a[l] > 0 && a[r] < 0) ans++; upd(1,1,n,l + 2, r,1); } return ans; }

컴파일 시 표준 에러 (stderr) 메시지

shoes.cpp: In function 'long long int count_swaps(std::vector<int>)':
shoes.cpp:47:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   47 |     for (int i = 0; i < a.size(); i++){
      |                     ~~^~~~~~~~~~
shoes.cpp:53:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   53 |     for (int i = 0; i < a.size(); i++){
      |                     ~~^~~~~~~~~~
#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...