Submission #885746

#TimeUsernameProblemLanguageResultExecution timeMemory
885746huutuanCouncil (JOI23_council)C++14
100 / 100
928 ms78876 KiB
#include<bits/stdc++.h> using namespace std; #define int long long #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() #define isz(x) ((int)(x).size()) #define sumof(x) accumulate(all(x), 0ll) const int N=3e5+1, M=20; int n, m, a[N][M], cnt[M], msk[N]; pair<int, int> f[1<<M]; int get_val(int idx, int val){ return val==-1?-1:__builtin_popcount(idx&(~msk[val])); } void optimize(int idx, int val){ int t1=get_val(idx, val); int t2=get_val(idx, f[idx].first); int t3=get_val(idx, f[idx].second); if (t1>t2){ f[idx].second=f[idx].first; f[idx].first=val; }else if (t1>t3 && val!=f[idx].first){ f[idx].second=val; } } void optimize(int idx, pair<int, int> val){ optimize(idx, val.first); optimize(idx, val.second); } void solve(){ cin >> n >> m; for (int j=0; j<(1<<m); ++j) f[j]={-1, -1}; for (int i=1; i<=n; ++i) for (int j=0; j<m; ++j) cin >> a[i][j], msk[i]^=a[i][j]<<j, cnt[j]+=a[i][j]; for (int i=1; i<=n; ++i) optimize((~msk[i])&((1<<m)-1), i); for (int i=(1<<m)-1; i>=0; --i) for (int j=0; j<m; ++j) if (i>>j&1) optimize(i^(1<<j), f[i]); for (int i=0; i<(1<<m); ++i) for (int j=0; j<m; ++j) if (i>>j&1) optimize(i, f[i^(1<<j)]); int val=n/2; for (int i=1; i<=n; ++i){ int ans=0; int mask=0; for (int j=0; j<m; ++j){ cnt[j]-=a[i][j]; if (cnt[j]>val) ++ans; if (cnt[j]==val) mask^=1<<j; } int t=f[mask].first; if (t==i) t=f[mask].second; if (t!=-1) ans+=get_val(mask, t); cout << ans << '\n'; for (int j=0; j<m; ++j) cnt[j]+=a[i][j]; } } int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); int ntests=1; // cin >> ntests; for (int i=1; i<=ntests; ++i) solve(); return 0; }
#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...