Submission #944679

#TimeUsernameProblemLanguageResultExecution timeMemory
944679yeediotMinerals (JOI19_minerals)C++14
40 / 100
15 ms2272 KiB
#include<bits/stdc++.h> using namespace std; #define F first #define S second #define all(x) x.begin(),x.end() #define pii pair<int,int> #define pb push_back #define sz(x) (int)(x.size()) #define chmin(x,y) x=min(x,y) #define chmax(x,y) x=max(x,y) #define vi vector<int> #define vp vector<pii> #define vvi vector<vi> const int mxn=43000; #ifdef local void setio(){freopen("/Users/iantsai/Library/Mobile Documents/com~apple~CloudDocs/cpp/Empty.md","r",stdin);} set<int>cur; int color[mxn]; int cnt[mxn]; int n; bool ok; int tt=0; void init(){ cin>>n; for(int i=1;i<=2*n;i++){ cin>>color[i]; } } int res; int Query(int x){ tt++; if(cur.find(x)!=cur.end()){ cur.erase(x); cnt[color[x]]--; if(cnt[color[x]]==0)res--; } else{ cur.insert(x); cnt[color[x]]++; if(cnt[color[x]]==1)res++; } return res; } void Answer(int a,int b){ if(a>b)swap(a,b); cout<<a<<' '<<b<<'\n'; if(color[a]!=color[b]){ ok=0; } } #else void setio(){} #include "minerals.h" #endif ////////////////// vector<int>cur2; void dac(vector<int>cur,int l,int r){ if(l>r)return; if(l==r){ Answer(cur[0],cur2[l]); return; } int mm=l+r>>1; int dick; for(int i=l;i<=mm;i++){ dick=Query(cur2[i]); } vector<int>L,R; for(auto i:cur){ int x=Query(i); if(x==dick){ L.pb(i); } else{ R.pb(i); } Query(i); } for(int i=l;i<=mm;i++){ Query(cur2[i]); } if(sz(L))dac(L,l,mm); if(sz(R))dac(R,mm+1,r); } void Solve(int n){ vector<int>temp; int prev=0; for(int i=1;i<=2*n;i++){ if(Query(i)==prev+1){ prev++; temp.pb(i); } else{ cur2.pb(i); } } for(int i=1;i<=2*n;i++){ Query(i); } dac(temp,0,n-1); } ///////////////// #ifdef local int main(){ ok=1; tt=0; setio(); init(); Solve(n); cout<<tt<<'\n'; if(ok)cout<<"Accepted!\n"; else cout<<"Wrong Answer\n"; } #else #endif /* input: */

Compilation message (stderr)

minerals.cpp: In function 'void dac(std::vector<int>, int, int)':
minerals.cpp:64:13: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   64 |     int mm=l+r>>1;
      |            ~^~
minerals.cpp:72:9: warning: 'dick' may be used uninitialized in this function [-Wmaybe-uninitialized]
   72 |         if(x==dick){
      |         ^~
#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...