Submission #1330885

#TimeUsernameProblemLanguageResultExecution timeMemory
1330885Nika533Minerals (JOI19_minerals)C++20
40 / 100
21 ms7132 KiB
#pragma GCC diagnostic warning "-std=c++11"
#include <bits/stdc++.h>
#include "minerals.h"
#define pb push_back
#define f first
#define s second
#define MOD 1000000007
#define flush fflush(stdout)
#define all(x) (x).begin(),(x).end()
#define allr(x) (x).rbegin(), (x).rend()
#define pii pair<int,int>
using namespace std;
const int NN=1e6+5;
int n,m,T,k,st[NN],xx;
vector<int> t[NN];
vector<int> a,b;
 
void rec(int v, int tl, int tr) {
//	cout<<"VVV "<<v<<" "<<tl<<" "<<tr<<" "<<t[v].size()<<endl;
//	for (auto idx:t[v]) {
//		cout<<a[idx]<<" ";
//	}
//	cout<<endl;
	if (tl==tr) {
		Answer(a[t[v][0]],b[tl]);
		return;
	}
	int mid=(tl+tr)/2;
	for (int i=tl; i<=mid; i++) {
		if (st[b[i]]!=1) {
			xx=Query(b[i]);
			st[b[i]]=1-st[b[i]];
		}
	}
	for (int i=mid+1; i<=tr; i++) {
		if (st[b[i]]!=0) {
			xx=Query(b[i]);
			st[b[i]]=1-st[b[i]];
		}
	}
	for (auto idx:t[v]) {
		int yy=Query(a[idx]);
		if (xx==yy) t[v*2].pb(idx);
		else t[v*2+1].pb(idx);
		xx=Query(a[idx]);
	}
	rec(v*2,tl,mid); 
	for (int i=tl; i<=mid; i++) {
		if (st[b[i]]!=0) {
			xx=Query(b[i]);
			st[b[i]]=1-st[b[i]];
		}
	}
	rec(v*2+1,mid+1,tr);
	for (int i=mid+1; i<=tr; i++) {
		if (st[b[i]]!=0) {
			xx=Query(b[i]);
			st[b[i]]=1-st[b[i]];
		}
	}
}

void Solve(int N) {
	n=N;
	int y=0;
	a.pb(0); b.pb(0);
	for (int i=1; i<=n*2; i++) {
		xx=Query(i);
		if (xx==y) b.pb(i);
		else a.pb(i);
		y=xx;
		st[i]=1;
	}
//	cout<<"AA"<<endl;
//	for (auto A:a) cout<<A<<" "; cout<<endl;
//	cout<<"BB"<<endl;
//	for (auto B:b) cout<<B<<" "; cout<<endl;
	for (int i=1; i<=n; i++) t[1].pb(i);
	rec(1,1,n);
}

Compilation message (stderr)

minerals.cpp:1:32: warning: '-std=c++11' is not an option that controls warnings [-Wpragmas]
    1 | #pragma GCC diagnostic warning "-std=c++11"
      |                                ^~~~~~~~~~~~
#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...