Submission #145881

# Submission time Handle Problem Language Result Execution time Memory
145881 2019-08-21T10:06:20 Z AKaan37 Arranging Shoes (IOI19_shoes) C++17
10 / 100
28 ms 23860 KB
#include <bits/stdc++.h>
#include "shoes.h"

using namespace std;

typedef long long lo;
typedef pair< lo,lo > PII;

#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define fio() ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
#define FOR for(lo i=1;i<=n;i++)
#define mid ((start+end)/2)
#define ort ((bas+son)/2)

const lo MAX = -1000000000000000000;
const lo MIN = 1000000000000000000;
const lo inf = 1000000000;
const lo KOK = 100000;
const lo LOG = 30;
const lo li = 500005;
const lo mod = 1000000007;

lo a[li],cev,hak[li],hak1[li],butun,butun1,farkli,farkli1,vis1[li],yer,tree[li*4],lazy[4*li];
vector<int> vv;
map<lo ,lo > vis;
vector<lo> sag[li];
vector<lo> sol[li];

inline void push(int node,int start,int end){
	if(lazy[node]==0)return ;
	tree[node]+=lazy[node];
	if(start!=end){
		lazy[node*2]+=lazy[node];
		lazy[node*2+1]+=lazy[node];
	}
	lazy[node]=0;
}

inline void update(int node,int start,int end,int l,int r){
	push(node,start,end);
	if(start>end || start>r || end<l)return ;
	if(start>=l && end<=r){
		lazy[node]+=1;
		push(node,start,end);
		return ;
	}
	update(node*2,start,mid,l,r),update(node*2+1,mid+1,end,l,r);
	tree[node]=tree[node*2]+tree[node*2+1];
}

inline int query(int node,int start,int end,int l,int r){
	if(start>end || start>r || end<l)return 0;
	push(node,start,end);
	if(start>=l && end<=r){
		return tree[node];
	}
	return query(node*2,start,mid,l,r)+query(node*2+1,mid+1,end,l,r);
}
long long count_swaps(vector<int> v) {
	for(lo i=0;i<(lo)v.size();i++){
		//~ vis[i]=vis[i-1]+vis[i];
		if(v[i]<0){
			if((lo)sag[-v[i]].size()-hak[-v[i]]>0){
				cev+=i-sag[-v[i]][hak[-v[i]]]-query(1,0,v.size(),sag[-v[i]][hak[-v[i]]],sag[-v[i]][hak[-v[i]]])+query(1,0,v.size(),i,i);;
				//~ cout<<cev<<" "<<query(0,0,v.size(),0,0)<<endl;
				update(1,0,v.size(),sag[-v[i]][hak[-v[i]]],i);
				//~ cout<<cev<<" "<<query(0,0,v.size(),0,0)<<endl;
				hak[-v[i]]++;
			}
			else{sol[-v[i]].pb(i);}
			
		}
		else{
			if((lo)sol[v[i]].size()-hak1[v[i]]>0){
				cev+=i-sol[v[i]][hak1[v[i]]]-1-query(0,0,v.size(),sol[v[i]][hak1[v[i]]]+1,sol[v[i]][hak1[v[i]]]+1)+query(0,0,v.size(),i,i);
				update(1,0,v.size(),sol[v[i]][hak1[v[i]]]+1,i);
				hak1[v[i]]++;
			}
			else{sag[v[i]].pb(i);}
		}
	}
	return cev;
}

//~ int main(){
	//~ lo n=0;
	//~ scanf("%lld",&n);
	//~ FOR{
		
		//~ scanf("%lld",&a[i]);
		//~ ////~ if(a[i]<0)
		//~ vv.pb(a[i]);
	//~ }
	//~ ////~ cout<<vv[0]<<endl;
	//~ lo at=count_swaps(vv);
	//~ printf("%lld\n",at);
//~ }
# Verdict Execution time Memory Grader output
1 Correct 24 ms 23800 KB Output is correct
2 Correct 24 ms 23800 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 24 ms 23800 KB Output is correct
2 Correct 24 ms 23800 KB Output is correct
3 Correct 26 ms 23860 KB Output is correct
4 Correct 24 ms 23800 KB Output is correct
5 Correct 25 ms 23800 KB Output is correct
6 Correct 24 ms 23804 KB Output is correct
7 Correct 23 ms 23800 KB Output is correct
8 Correct 24 ms 23800 KB Output is correct
9 Correct 23 ms 23804 KB Output is correct
10 Correct 24 ms 23800 KB Output is correct
11 Correct 25 ms 23800 KB Output is correct
12 Incorrect 28 ms 23800 KB Output isn't correct
13 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 24 ms 23800 KB Output is correct
2 Correct 24 ms 23800 KB Output is correct
3 Incorrect 24 ms 23800 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 24 ms 23800 KB Output is correct
2 Incorrect 24 ms 23800 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 24 ms 23800 KB Output is correct
2 Correct 24 ms 23800 KB Output is correct
3 Correct 26 ms 23860 KB Output is correct
4 Correct 24 ms 23800 KB Output is correct
5 Correct 25 ms 23800 KB Output is correct
6 Correct 24 ms 23804 KB Output is correct
7 Correct 23 ms 23800 KB Output is correct
8 Correct 24 ms 23800 KB Output is correct
9 Correct 23 ms 23804 KB Output is correct
10 Correct 24 ms 23800 KB Output is correct
11 Correct 25 ms 23800 KB Output is correct
12 Incorrect 28 ms 23800 KB Output isn't correct
13 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 24 ms 23800 KB Output is correct
2 Correct 24 ms 23800 KB Output is correct
3 Correct 26 ms 23860 KB Output is correct
4 Correct 24 ms 23800 KB Output is correct
5 Correct 25 ms 23800 KB Output is correct
6 Correct 24 ms 23804 KB Output is correct
7 Correct 23 ms 23800 KB Output is correct
8 Correct 24 ms 23800 KB Output is correct
9 Correct 23 ms 23804 KB Output is correct
10 Correct 24 ms 23800 KB Output is correct
11 Correct 25 ms 23800 KB Output is correct
12 Incorrect 28 ms 23800 KB Output isn't correct
13 Halted 0 ms 0 KB -