#include <bits/stdc++.h>
using namespace std;
struct BIT{
    int n; vector<int> b;
    void init(int _n){ n=_n; b.assign(n+1,0); }
    BIT(int _n=0){ init(_n); }
    void upd(int id,int v){ for(; id<=n; id+=id&-id) b[id]+=v; }
    int get(int id){ int s=0; for(; id>0; id-=id&-id) s+=b[id]; return s; }
};
int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int L,R; if(!(cin>>L>>R)) return 0;
    BIT bit(L+5); // +5 cho an toàn vì ta sẽ cập nhật tới x+1
    for(int t=0; t<R; t++){
        int m; cin>>m;
        vector<int>a(m);
        for(int i=0;i<m;i++) cin>>a[i];
        vector<int> pref(m+1,0), suff(m+2,0);
        for(int i=1;i<=m;i++) pref[i]=pref[i-1]+a[i-1];
        for(int i=m;i>=1;i--) suff[i]=suff[i+1]+a[i-1];
        for(int i=1;i<=m;i++){
            int x = L - pref[i];
            int y = suff[i];
            // khoảng dịch p thỏa (p in [y .. x-1])  (0-based p)
            if(x>y){ // nếu x==y thì khoảng rỗng
                // ánh xạ sang BIT 1-based: p -> p+1
                bit.upd(y+1,1);
                bit.upd(x+1,-1);
            }
        }
    }
    long long ans=0;
    for(int p=0;p<L;p++){
        if(bit.get(p+1)==0) ans++;
    }
    cout<<ans<<"\n";
}
| # | 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... |