Submission #1072715

#TimeUsernameProblemLanguageResultExecution timeMemory
1072715SiliconSquaredMinerals (JOI19_minerals)C++14
40 / 100
1282 ms1880 KiB
#include "minerals.h" using namespace std; #include <vector> #include <iostream> int query(int x){return Query(x+1);} int n; struct mineral{ int a,b; mineral(){a=0;b=n;} }; vector<mineral> v; vector<int> l; vector<int> r; void f(int a,int b){ // cerr<<a<<','<<b<<';'; for (int i=a;i<b;i++){ query(l[i]); } for (int i=0;i<n;i++){ if (v[i].a<=a && v[i].b>=b){ if (query(r[i])>(b-a)){ v[i].a=b; }else{ v[i].b=b; } query(r[i]); } } for (int i=a;i<b;i++){ query(l[i]); } } void Solve(int N) { int a,b,c; n=N; b=0; for (int i=0;i<2*n;i++){ a=query(i); if (a>b){ l.push_back(i); b=a; }else{ r.push_back(i); } } for (int i=0;i<2*n;i++){query(i);} v.resize(n,mineral()); vector<pair<int,int>> w; w.push_back({0,N}); while (!w.empty()){ a=w[w.size()-1].first; b=w[w.size()-1].second; c=(a+b)/2; w.pop_back(); if (a+1==b||a==b){continue;} f(a,c); w.push_back({a,c}); w.push_back({c,b}); } for (int i=0;i<n;i++){ Answer(r[i]+1,l[v[i].a]+1); } }
#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...