Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #define maxn 300009
- #define inf 1000000007
- #define llinf 1000000000000000007
- #define ff first
- #define ss second
- #define mp make_pair
- #define pb push_back
- #define mid(a,b) (a+b)/2
- #define endl "\n"
- #define sz size()
- #define MOD 1000000007
- #define M 100000
- #define pii pair<int,int>
- #define all(x) x.begin(),x.end()
- #define tr(i, c) for(typeof((c).begin()) i = (c).begin(); i!=(c).end(); i++)
- using namespace std;
- typedef long long ll;
- //priority_queue < pii, vector< pii >, greater< pii > > Q;
- int s[maxn*3], a[maxn];
- void build(int nd, int l, int r){
- if(l == r){
- s[nd] = a[l];
- return;
- }
- build((nd<<1), l, mid(l, r));
- build(((nd<<1)|1), mid(l, r)+1, r);
- s[nd] = s[(nd<<1)] + s[((nd<<1)|1)];
- }
- void upd(int nd, int l, int r, int x){
- if(l == r){
- s[nd] = 1;
- return;
- }
- if(x <= mid(l, r))
- upd((nd<<1), l, mid(l, r), x);
- else
- upd(((nd<<1)|1), mid(l, r)+1, r, x);
- s[nd] = s[(nd<<1)] + s[((nd<<1)|1)];
- }
- int get(int nd, int l, int r, int x, int y){
- if(l > y or r < x)
- return 0;
- if(l >= x && r <= y)
- return s[nd];
- return get((nd<<1), l, mid(l, r), x, y) + get(((nd<<1)|1), mid(l, r)+1, r, x, y);
- }
- int main(){
- ios_base::sync_with_stdio(false);
- cin.tie(NULL);
- int n, d, ans = 0, pos;
- cin>>n>>d;
- for(int i=1; i<=n; i++)
- cin>>a[i];
- build(1, 1, n);
- for(int i=1; i<n; i++){
- pos = min(n, i+d);
- if(get(1, 1, n, i+1, pos) == 0){
- upd(1, 1, n, pos);
- ans++;
- }
- }
- cout<<ans<<endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement