Submission #1270280

#TimeUsernameProblemLanguageResultExecution timeMemory
1270280StefanSebezLast supper (IOI12_supper)C++20
0 / 100
235 ms17008 KiB
#include "advisor.h" #include <bits/stdc++.h> using namespace std; #define fi first #define se second #define pb push_back #define ll long long #define ld long double #define mp make_pair const int N=1e5+50,lg=15,inf=1e9; struct Node{int maks,i;}; Node Merge(Node a,Node b){if(a.maks>=b.maks) return a;return b;} struct SegTree{ int root,nc,lc[2*N],rc[2*N];Node node[2*N]; SegTree(){node[0]={-inf,-inf};} void Update(int &c,int ss,int se,int qind,int qval){ if(!c) c=++nc,node[c]={-inf,ss}; if(ss==se){node[c]={qval,ss};return;} int mid=ss+se>>1; if(qind<=mid)Update(lc[c],ss,mid,qind,qval); else Update(rc[c],mid+1,se,qind,qval); node[c]=Merge(node[lc[c]],node[rc[c]]); } Node Get(int c,int ss,int se,int qs,int qe){ if(qs>qe||qe<ss||se<qs)return {-inf,-inf}; if(qs<=ss&&se<=qe)return node[c]; int mid=ss+se>>1; return Merge(Get(lc[c],ss,mid,qs,qe),Get(rc[c],mid+1,se,qs,qe)); } }ST; vector<int>ind[N]; void ComputeAdvice(int *C, int n, int K, int m1) { if(m1==10000) return; vector<int>ids; for(int i=0;i<n;i++) ind[C[i]].pb(i); for(int i=0;i<=n;i++) ind[i].pb(inf); map<int,int>mapa,id; int niz[K+10]; for(int i=0;i<K;i++){ mapa[i]++;niz[i]=i;id[i]=i; int lb=lower_bound(ind[i].begin(),ind[i].end(),0)-ind[i].begin(); int x=ind[i][lb]; //printf("%i: %i\n",i,x); ST.Update(ST.root,0,K-1,i,x); } //for(int j=0;j<K;j++) printf("%i ",ST.Get(ST.root,0,K-1,j,j).maks);printf("\n"); for(int i=0;i<n;i++){ if(mapa[C[i]]>0){ ids.pb(K); int j=id[C[i]]; int lb=lower_bound(ind[C[i]].begin(),ind[C[i]].end(),i+1)-ind[C[i]].begin(); int y=ind[C[i]][lb]; ST.Update(ST.root,0,K-1,j,y); continue; } Node x=ST.Get(ST.root,0,K-1,0,K-1); int lb=lower_bound(ind[C[i]].begin(),ind[C[i]].end(),i+1)-ind[C[i]].begin(); int y=ind[C[i]][lb]; ST.Update(ST.root,0,K-1,x.i,y); ids.pb(x.i); mapa[niz[x.i]]--; mapa[C[i]]++; niz[x.i]=C[i]; //for(int j=0;j<K;j++) printf("%i ",ST.Get(ST.root,0,K-1,j,j).maks);printf("\n"); } //for(auto i:ids) printf("%i ",i);printf("\n"); for(auto i:ids){ for(int j=0;j<lg;j++){ WriteAdvice((i>>j)%2); } } }
#include "assistant.h" #include <bits/stdc++.h> using namespace std; #define fi first #define se second #define pb push_back #define ll long long #define ld long double #define mp make_pair const int N=1e5+50,lg=15; int ids[N]; void Assist(unsigned char *A, int n, int K, int m){ if(m==10000) return; for(int i=0;i<m;i++){ if(A[i]==1) ids[i/lg]^=1<<(i%lg); } //for(int i=0;i<n;i++) printf("%i ",ids[i]);printf("\n"); /*for(int i=0;i*lg+lg<=m;i++){ for(int j=i*lg,k=0;j<i*lg+lg;j++,k++){ if(A[j]==1) ids[i]^=1<<k; } }*/ int niz[K+10]; for(int i=0;i<K;i++) niz[i]=i; for(int i=0;i<n;i++){ int x=GetRequest(); if(ids[i]>=K) continue; PutBack(niz[ids[i]]); niz[ids[i]]=x; } /*for (int i = 0; i < N; i++) { int req = GetRequest(); if (req >= K) PutBack(req % K); }*/ }
#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...