제출 #441804

#제출 시각아이디문제언어결과실행 시간메모리
441804QuantumK9Arranging Shoes (IOI19_shoes)C++17
100 / 100
575 ms148176 KiB
#include "shoes.h" #include <bits/stdc++.h> using namespace std; #define ll long long #define pb push_back #define mp make_pair map<int, queue<int> > rgt; int LSO( int n ){ return ( n&(-n) ); } class FT{ private: vector<int> ft; public: FT( int n ){ ft.assign(n+1, 0); } int rsq(int b){ int sum = 0; for( ; b; b -= LSO(b) ){ sum += ft[b];} return sum; } void adjust( int k, int v ){ for(; k < (int)ft.size(); k += LSO(k) ){ ft[k]+=v; } } //void report(){ for( int i = 0; i < ft.size(); i++ ){ cout << ft[i] << " "; } cout << endl; } }; long long count_swaps(vector<int> s) { //num ll S = s.size(); FT tre = FT(S); //iterate through s -- preprocess for( int i = 0; i < S; i++ ){ rgt[ s[i] ].push(i+1); tre.adjust( i+1, 1 ); } bool idim[S+2]; memset( idim, true, sizeof idim ); //process ll grand = 0; for( int i = 0; i < S; i++ ){ if( idim[i+1] ){ idim[i+1] = false; rgt[ s[i] ].pop(); tre.adjust( i+1, -1 ); //move partner ll val = rgt[ -s[i] ].front(); //for( int j = 0; j < val; j++ ){ grand += idim[j]; } grand += tre.rsq(val-1); idim[val] = false; rgt[ -s[i] ].pop(); tre.adjust( val, -1); if( s[i] > 0 ){ grand++; } } } return grand; }
#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...