This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
/** try <3 **/
#include<bits/stdc++.h>
using namespace std;
#define task "sol"
#define lb lower_bound
#define ub upper_bound
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define zs(v) ((int)(v).size())
#define BIT(x, i) (((x) >> (i)) & 1)
#define CNTBIT __builtin_popcountll
#define ALL(v) (v).begin(),(v).end()
#define endl '\n'
typedef long double ld;
typedef long long ll;
typedef pair<int,int> pii;
const int dx[4]={-1, 0, 1, 0}, dy[4]={0, 1, 0, -1};
const int dxx[8]={-1, -1, 0, 1, 1, 1, 0, -1}, dyy[8]={0, 1, 1, 1, 0, -1, -1, -1};
const ll mod=1000000007; /// 998244353
const int base=311;
const int N=5e5+5;
int n,m;
vector<int> a[N];
void gogo()
{
cin>>m>>n;
for(int i=1;i<=n;++i)
{
int x;
cin>>x;
for(int j=1;j<=x;++j)
{
int k;
cin>>k;
a[i].pb(k);
}
}
vector<pii> all;
for(int i=1;i<=n;++i)
{
vector<pii> seg;
int sum=0;
for(int j:a[i]) sum+=j;
seg.pb(mp(1,m-sum));
seg.pb(mp(sum+1,m));
int s=0;
for(int j:a[i])
{
s+=j;
seg.pb(mp(s+1,m-(sum-s)));
}
sort(ALL(seg));
// for(pii j:seg) cout<<j.fi<<' '<<j.se<<endl;
// cout<<endl;
int L=-1, R=-1;
for(pii i:seg)
{
if(L<=i.fi&&i.fi<=R)
{
R=max(R,i.se);
}
else if(i.fi>R)
{
if(L!=-1)
{
all.pb(mp(L,R));
}
L=i.fi;
R=i.se;
}
}
all.pb(mp(L,R));
}
vector<int> s;
for(pii i:all)
{
s.pb(i.fi);
s.pb(i.se);
// cout<<i.fi<<' '<<i.se<<endl;
}
sort(ALL(s));
s.resize(unique(ALL(s))-s.begin());
int mx=0;
for(pii &i:all)
{
i.fi=lb(ALL(s),i.fi)-s.begin();
i.se=lb(ALL(s),i.se)-s.begin();
i.fi*=2;
i.se*=2;
mx=max(mx,i.se);
}
vector<int> f(mx+5,0);
int ans=0;
for(pii i:all)
{
f[i.fi]++;
f[i.se+1]--;
}
for(int i=1;i<=mx;++i) f[i]+=f[i-1];
for(int i=0;i<=mx;++i)
{
if(f[i]<n) continue;
int j=i;
while(j<mx&&f[j+1]==f[i]) ++j;
// cout<<s[i/2]<<' '<<s[j/2]<<endl;
assert(j%2==0&&i%2==0);
ans+=s[j/2]-s[i/2]+1;
i=j;
}
cout<<m-ans;
}
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0);
if(fopen(task".inp","r"))
{
freopen(task".inp","r",stdin);
freopen(task".out","w",stdout);
}
gogo();
}
Compilation message (stderr)
lasers.cpp: In function 'int main()':
lasers.cpp:141:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
141 | freopen(task".inp","r",stdin);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
lasers.cpp:142:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
142 | freopen(task".out","w",stdout);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |