#include using namespace std; int lmiast,lmiejsc,lzgloszen,a,b,n,p,q,tym; vector V[3],M,zmiana; #define show if(0) void cl(){ V[0].clear(); V[1].clear(); V[2].clear(); M.clear(); zmiana.clear(); } void add(int v){ if(V[1][v]>=a&&V[2][v]<=b){ show cout<<"v: "<1){ if(M[v]+V[0][v/2]>M[v/2]) zmiana[v/2]+=M[v]+V[0][v/2]-M[v/2]; M[v/2]=max(M[v]+V[0][v/2],M[v/2]); v/=2; } //M[v/4]=M[v/2]+V[0][v/4]; return; } if(V[1][v]==V[2][v]) return; if((V[1][v]+V[2][v])/2>=a&&V[1][v]<=b) add(2*v); if(V[2][v]>=a&&(V[1][v]+V[2][v])/2+1<=b) add(2*v+1); } void addm(int v){ if(V[1][v]>=a&&V[2][v]<=b){ show cout<<"addm v: "<1){ if(M[v/2]>(max(M[(v/2)*2+1],M[(v/2)*2])+V[0][v/2])) M[v/2]-=n;/* if(zmiana[v/2]>0){ M[v/2]-=zmiana[v/2]; }*/ // M[v/2]=max(M[v]+V[0][v/2],M[v/2]); v/=2; } //M[v/4]=M[v/2]+V[0][v/4]; return; } if(V[1][v]==V[2][v]) return; if((V[1][v]+V[2][v])/2>=a&&V[1][v]<=b) addm(2*v); if(V[2][v]>=a&&(V[1][v]+V[2][v])/2+1<=b) addm(2*v+1); } void program(){ cin>>lmiast>>lmiejsc>>lzgloszen; lmiast--; cl(); int pot=1; while(pot>a>>b>>n; b--; a+=pot-1; b+=pot-1;/* for(int k=0;k<2*pot;k++){ V[0][k]=0; }*/ zmiana.clear(); add(1); if(M[1]>lmiejsc){ addm(1); cout<<"N"<>dane; while(dane--){ program(); } return 0; }