Submission #30067

#TimeUsernameProblemLanguageResultExecution timeMemory
30067gs14004무제 (POI11_rot)C++14
0 / 100
169 ms8408 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long lint;
typedef long double llf;
typedef pair<lint, lint> pi;
const int MAXN = 200005;

int a[MAXN], n, cnt;

struct bit{
	int tree[MAXN];
	void add(int x, int v){
		while(x <= n){
			tree[x] += v;
			x += x & -x;
		}
	}
	int query(int x){
		int ret = 0;
		while(x) ret += tree[x], x -= x & -x;
		return ret;
	}
}bit;

lint solve(int s, int m, int e){
	lint ans = 0;
	if(e - m > m - s){
		for(int j=s; j<m; j++) bit.add(a[j], -1);
		for(int j=s; j<m; j++) ans += bit.query(a[j] - 1);
		for(int j=s; j<m; j++) bit.add(a[j], 1);
	}
	else{
		for(int j=m; j<e; j++) bit.add(a[j], -1);
		for(int j=m; j<e; j++) ans += m - s - bit.query(a[j]);
		for(int j=m; j<e; j++) bit.add(a[j], 1);
	}
	return ans;
}

lint solve(){
	int x;
	scanf("%d",&x);
	lint ans = 0;
	if(x == 0){
		int s = cnt;
		ans += solve();
		int m = cnt;
		ans += solve();
		int e = cnt;
		lint tmp = solve(s, m, e);
		ans += min(tmp, 1ll * (e - m) * (m - s) - tmp);
	}
	else{
		bit.add(x, 1);
		a[cnt++] = x;
	}
	return ans;
}

int main(){
	scanf("%d",&n);
	printf("%lld\n", solve());
}

Compilation message (stderr)

rot.cpp: In function 'lint solve()':
rot.cpp:42:16: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d",&x);
                ^
rot.cpp: In function 'int main()':
rot.cpp:61:16: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d",&n);
                ^
#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...
#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...