Submission #416671

# Submission time Handle Problem Language Result Execution time Memory
416671 2021-06-02T18:01:34 Z inksamurai Swap Swap Sort (CCO21_day1problem1) C++17
25 / 25
3571 ms 91032 KB
#include <cmath>
#include <deque>
#include <algorithm>
#include <iterator>
#include <list>
#include <tuple>
#include <map>
#include <unordered_map>
#include <queue>
#include <set>
#include <unordered_set>
#include <stack>
#include <string>
#include <vector>
#include <fstream>
#include <iostream>
#include <functional>
#include <numeric>
#include <iomanip> 
#include <stdio.h>
//eolibraries
#define lnf 3999999999999999999
#define inf 999999999
#define PI 3.14159265359
#define endl "\n"
#define fi first
#define se second
#define pb push_back
#define eb emplace_back
#define ll long long
#define all(c) (c).begin(),(c).end()
#define sz(c) (ll)(c).size()
#define mkp(a,b) make_pair(a,b)
#define make_unique(a) sort(all(a)),a.erase(unique(all(a)),a.end())
#define rsz(a,n) a.resize(n)
#define pii pair <ll,ll>
#define rep(i,n) for(ll i = 0 ; i < n ; i++) 
#define drep(i,n) for(ll i = n-1 ; i >= 0 ; i--)
#define crep(i,x,n) for(ll i = x ; i < n ; i++)
#define vi vector <ll> 
#define vec(s) vector<s>
#define rsz(a,n) a.resize(n)
#define rszv(a,n,v) a.resize(n,v)
#define fcin ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);
//eodefine
 
const ll max_n = 200000;
 
using namespace std;
struct fnw {
private:
    ll n;
    vector <ll> bit;
 
public:
    fnw(ll m) {
        n=m;
        bit.resize(n+2,0);
    }
    ll get(ll i) {
        ll s = 0;
        // while (i > 0) { s += bit[i]; i -= i & -i; }
        while(i <= n) { s += bit[i]; i += i & -i;  }
        return s;
    }
    void add(ll i,ll x) {
        while(i > 0) { bit[i] += x; i -= i & -i; }
        // while (i <= n) { bit[i] += x; i += i & -i; }
    }
};
 
ll n,k,q;
vi a,inarg;
vi inds[max_n];
ll frq[max_n];
 
 
map <pii,ll> memo;

ll cntinv=0;
bool swpd=0;

ll f(ll x,ll y) {
	
	if(frq[x]>frq[y]) {swap(x,y);swpd=1;}

    if(memo.find({x,y})!=memo.end()) return memo[{x,y}];

    ll cnw=0;

    for(auto i : inds[x]) {
        auto it=lower_bound(all(inds[y]),i);
        if(it==inds[y].begin()) continue;
        it=prev(it);
        ll j=it-inds[y].begin();
        cnw += (j+1);
    }
 	// return cnw;   
    return memo[{x,y}] = cnw;
}
 
int main(){
fcin;
    cin>>n>>k>>q;
    a.resize(n,0);
    fnw bit(max_n+10);
    
    ll cinv=0;
 
    rep(i,n) {
        cin>>a[i];
        cinv += bit.get(a[i]);
        bit.add(a[i]-1,1);
        inds[a[i]].pb(i);
        frq[a[i]]++;
    }
 
    rep(i,k) inarg.pb(i+1);
   
  	cntinv=cinv;

    rep(_,q) {
        ll j;
        cin>>j;
        j--;
        ll x=inarg[j],y=inarg[j+1],cnt=0;
        swpd=0;
        ll cnw=f(y,x);
        // cout << cnw << " " << swpd << "\n";
        if(swpd) {cntinv+=frq[x]*frq[y]; cntinv -= 2*cnw; }
	    else { cntinv-=frq[x]*frq[y]; cntinv += 2*cnw; }

        // rep(i,n)if(ina[i]==x)cnt++;
 
        // rep(i,n) {
        //     if(ina[i]==y) {
        //         cntinv-=cnt;
        //     }
        //     if(ina[i]==x)cnt--;
        // }
        // cnt=0;
        // rep(i,n) {
        //     if(ina[i]==y){
        //         cntinv+=2*cnt;
        //     }
        //     if(ina[i]==x)cnt++;
        // }
        
        swap(inarg[j],inarg[j+1]);
 
        cout<<cntinv<<"\n";
    }
 
/*
*/
 
    return 0;   
}

Compilation message

Main.cpp: In function 'int main()':
Main.cpp:126:36: warning: unused variable 'cnt' [-Wunused-variable]
  126 |         ll x=inarg[j],y=inarg[j+1],cnt=0;
      |                                    ^~~
# Verdict Execution time Memory Grader output
1 Correct 4 ms 6476 KB Output is correct
2 Correct 5 ms 6732 KB Output is correct
3 Correct 6 ms 6732 KB Output is correct
4 Correct 8 ms 6732 KB Output is correct
5 Correct 8 ms 6732 KB Output is correct
6 Correct 7 ms 6860 KB Output is correct
7 Correct 7 ms 6844 KB Output is correct
8 Correct 8 ms 7036 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 18 ms 8368 KB Output is correct
2 Correct 20 ms 8520 KB Output is correct
3 Correct 19 ms 8456 KB Output is correct
4 Correct 18 ms 8544 KB Output is correct
5 Correct 22 ms 8820 KB Output is correct
6 Correct 24 ms 8984 KB Output is correct
7 Correct 30 ms 10084 KB Output is correct
8 Correct 33 ms 11400 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 219 ms 19312 KB Output is correct
2 Correct 230 ms 19292 KB Output is correct
3 Correct 357 ms 19328 KB Output is correct
4 Correct 610 ms 22776 KB Output is correct
5 Correct 772 ms 25256 KB Output is correct
6 Correct 768 ms 25632 KB Output is correct
7 Correct 770 ms 25576 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 6476 KB Output is correct
2 Correct 5 ms 6732 KB Output is correct
3 Correct 6 ms 6732 KB Output is correct
4 Correct 8 ms 6732 KB Output is correct
5 Correct 8 ms 6732 KB Output is correct
6 Correct 7 ms 6860 KB Output is correct
7 Correct 7 ms 6844 KB Output is correct
8 Correct 8 ms 7036 KB Output is correct
9 Correct 18 ms 8368 KB Output is correct
10 Correct 20 ms 8520 KB Output is correct
11 Correct 19 ms 8456 KB Output is correct
12 Correct 18 ms 8544 KB Output is correct
13 Correct 22 ms 8820 KB Output is correct
14 Correct 24 ms 8984 KB Output is correct
15 Correct 30 ms 10084 KB Output is correct
16 Correct 33 ms 11400 KB Output is correct
17 Correct 219 ms 19312 KB Output is correct
18 Correct 230 ms 19292 KB Output is correct
19 Correct 357 ms 19328 KB Output is correct
20 Correct 610 ms 22776 KB Output is correct
21 Correct 772 ms 25256 KB Output is correct
22 Correct 768 ms 25632 KB Output is correct
23 Correct 770 ms 25576 KB Output is correct
24 Correct 779 ms 26764 KB Output is correct
25 Correct 756 ms 28684 KB Output is correct
26 Correct 808 ms 31924 KB Output is correct
27 Correct 919 ms 35012 KB Output is correct
28 Correct 1080 ms 39824 KB Output is correct
29 Correct 1289 ms 48236 KB Output is correct
30 Correct 1425 ms 57020 KB Output is correct
31 Correct 1358 ms 56940 KB Output is correct
32 Correct 726 ms 90920 KB Output is correct
33 Correct 1002 ms 26892 KB Output is correct
34 Correct 1141 ms 28612 KB Output is correct
35 Correct 1264 ms 30388 KB Output is correct
36 Correct 1772 ms 40248 KB Output is correct
37 Correct 3362 ms 86312 KB Output is correct
38 Correct 3180 ms 87292 KB Output is correct
39 Correct 2334 ms 91032 KB Output is correct
40 Correct 1820 ms 69560 KB Output is correct
41 Correct 1650 ms 75220 KB Output is correct
42 Correct 1424 ms 90528 KB Output is correct
43 Correct 1560 ms 90200 KB Output is correct
44 Correct 1650 ms 90952 KB Output is correct
45 Correct 1530 ms 90668 KB Output is correct
46 Correct 1672 ms 70624 KB Output is correct
47 Correct 1951 ms 77720 KB Output is correct
48 Correct 3571 ms 90312 KB Output is correct
49 Correct 3392 ms 89376 KB Output is correct
50 Correct 944 ms 90512 KB Output is correct
51 Correct 858 ms 89900 KB Output is correct
52 Correct 860 ms 89736 KB Output is correct
53 Correct 1107 ms 90028 KB Output is correct
54 Correct 1122 ms 90056 KB Output is correct
55 Correct 5 ms 6476 KB Output is correct