Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<algorithm>
- #include<cstdlib>
- #include<cstring>
- #include<cstdio>
- #include<vector>
- #include<cmath>
- #include<queue>
- #include<stack>
- #include<deque>
- #include<map>
- #include<set>
- #define MAX(a,b) (a>b?a:b)
- #define MIN(a,b) (a<b?a:b)
- #define UP upper_bound
- #define LB lower_bound
- #define LL long long
- #define Pi 3.14159265358
- #define si size()
- #define en end()
- #define be begin()
- #define fi first
- #define se second
- #define pb push_back
- #define mp make_pair
- #define ii set<int>::iterator
- using namespace std;
- void build(int ind, int L, int R)
- {
- if(L==R)
- {
- tree[ind].st=0;
- tree[ind].en=0;
- tree[ind].mx=0;
- tree[ind].bl=1;
- return;
- }
- build(2*ind,L,(L+R)/2);
- build(2*ind+1,(L+R)/2+1,R);
- if(tree[2*ind].bl^tree[2*ind+1].bl){ tree[ind].bl=0; goto done; }
- else
- {
- int delta=min(C-tree[2*ind].mx,max(tree[2*ind+1].st-tree[2*ind].en+a[(R+L)/2+1]));
- if(max(C,tree[2*ind].en+delta)<tree[2*ind+1].st){ tree[ind].bl=0; goto done; }
- }
- done: ;
- }
- main(){
- cin>>n>>C;
- for(i=1;i<=n;i++)
- {
- scanf("%d",&a[i]);
- a[i+n]=a[i];
- }
- for(i=1;i<=n;i++)
- {
- scanf("%d",&b[i]);
- b[i+n]=b[i];
- }
- build(1,1,k);
- for(i=1;i<=n;i++)
- {
- l=i; r=n+i;
- Res=Solve(1,1,k);
- if(Res.bl)ans++;
- }
- cout<<ans;
- system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement