답안 #709425

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
709425 2023-03-13T14:28:00 Z mars4 원숭이와 사과 나무 (IZhO12_apple) C++17
100 / 100
406 ms 237900 KB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp> 

using namespace std;
using namespace __gnu_pbds; 

#define ff              first
#define ss              second
#define ll              int64_t
#define ld              long double
#define nl              cout<<"\n"
#define i128            __int128_t
#define all(v)          v.begin(),v.end()
#define mset(a,v)       memset((a),(v),sizeof(a))
#define forn(i,a,b)     for(int64_t i=int64_t(a);i<int64_t(b);++i)
#define forb(i,a,b)     for(int64_t i=int64_t(a);i>=int64_t(b);--i)
#define fastio()        ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);

#define mod         1'000'000'007
#define mod2        998'244'353 
#define inf         1'000'000'000'000'007
#define pi          3.14159265358979323846

template<class key,class cmp=std::less<key>>
using ordered_set=tree<key,null_type,cmp,rb_tree_tag,tree_order_statistics_node_update>;

template<class L,class R> ostream& operator<<(ostream& out,pair<L,R> &p)        {return out<<"("<<p.ff<<", "<<p.ss<<")";}
template<class T> ostream& operator<<(ostream& out,vector<T> &v)                {out<<"[";for(auto it=v.begin();it!=v.end();++it){if(it!=v.begin())out<<", ";out<<*it;}return out<<"]";}
template<class T> ostream& operator<<(ostream& out,deque<T> &v)                 {out<<"[";for(auto it=v.begin();it!=v.end();++it){if(it!=v.begin())out<<", ";out<<*it;}return out<<"]";}
template<class T> ostream& operator<<(ostream& out,set<T> &s)                   {out<<"{";for(auto it=s.begin();it!=s.end();++it){if(it!=s.begin())out<<", ";out<<*it;}return out<<"}";}
template<class T> ostream& operator<<(ostream& out,ordered_set<T> &s)           {out<<"{";for(auto it=s.begin();it!=s.end();++it){if(it!=s.begin())out<<", ";out<<*it;}return out<<"}";}
template<class L,class R> ostream& operator<<(ostream& out,map<L,R> &m)         {out<<"{";for(auto it=m.begin();it!=m.end();++it){if(it!=m.begin())out<<", ";out<<*it;}return out<<"}";}

void dbg_out() {cerr<<"]\n";}
template<typename Head,typename... Tail> 
void dbg_out(Head H,Tail... T) {cerr<<H;if(sizeof...(Tail))cerr<<", ";dbg_out(T...);}
#ifdef LOCAL
#define dbg(...) cerr<<"["<<#__VA_ARGS__<<"] = [",dbg_out(__VA_ARGS__)
#else
#define dbg(...)
#endif

//---------------------------------mars4---------------------------------

class DynamicSegtree 
{
	ll N;
	ll ind;

	struct Node
	{
		int left;
		int right;
		ll val;
		ll lazy;

		Node(): left(-1), right(-1), val(0), lazy(-1) {}
	};

	void extend(ll cind)
	{
		if(T[cind].left==-1)
		{
			T[cind].left=++ind;
			T[cind].right=++ind;
		}
	}

	void _push(ll ind,ll st,ll ed,ll val)
	{
		if(st!=ed)
		{
			extend(ind);
			T[T[ind].left].lazy=val;
			T[T[ind].right].lazy=val;
		}
	}

	ll combine(ll a,ll b)
	{
		return a+b;
	}

	void _update(ll ind,ll st,ll ed,ll l,ll r,ll val)
	{
		if(T[ind].lazy!=-1)
		{
			T[ind].val=T[ind].lazy*(ed-st+1);
			_push(ind,st,ed,T[ind].lazy);
			T[ind].lazy=-1;
		}
		if(st>ed or st>r or ed<l)
		{
			return;
		}
		if(st>=l and ed<=r)
		{
			T[ind].val=val*(ed-st+1);
			_push(ind,st,ed,val);
			return;
		}
		ll mid=(st+ed)>>1;
		extend(ind);
		_update(T[ind].left,st,mid,l,r,val);
		_update(T[ind].right,mid+1,ed,l,r,val);
		T[ind].val=combine(T[T[ind].left].val,T[T[ind].right].val);
	}

	ll _query(ll ind,ll st,ll ed,ll l,ll r)
	{
		if(T[ind].lazy!=-1)
		{
			T[ind].val=T[ind].lazy*(ed-st+1);
			_push(ind,st,ed,T[ind].lazy);
			T[ind].lazy=-1;
		}
		if(st>ed or st>r or ed<l)
		{
			return 0;
		}
		if(st>=l and ed<=r)
		{
			return T[ind].val;
		}
		ll mid=(st+ed)>>1;
		extend(ind);
		return combine(_query(T[ind].left,st,mid,l,r),_query(T[ind].right,mid+1,ed,l,r));
	}

	public:
	vector<Node> T;

	void init(ll n)
	{
		T=vector<Node>(10'000'000);
		ind=0;
		N=n;
	}

	void update(ll l,ll r,ll val)
	{
		_update(0,0,N-1,l,r,val);
	}

	ll query(ll l,ll r)
	{
		return _query(0,0,N-1,l,r);
	}
};

int main()
{
	fastio();
	ll z,n,m,t,k,i,j,l,d,h,r;
	DynamicSegtree s;
	s.init(mod);
	cin>>n;
	ll c=0;
	forn(i,0,n)
	{
		cin>>d>>l>>r;
		if(d==1)
		{
			c=s.query(l+c,r+c);
			cout<<c<<"\n";
		}
		else
		{
			s.update(l+c,r+c,1);
		}
	}
	cerr<<"\nTime elapsed: "<<1000*clock()/CLOCKS_PER_SEC<<"ms\n";
	return 0;
}

Compilation message

apple.cpp: In function 'int main()':
apple.cpp:155:5: warning: unused variable 'z' [-Wunused-variable]
  155 |  ll z,n,m,t,k,i,j,l,d,h,r;
      |     ^
apple.cpp:155:9: warning: unused variable 'm' [-Wunused-variable]
  155 |  ll z,n,m,t,k,i,j,l,d,h,r;
      |         ^
apple.cpp:155:11: warning: unused variable 't' [-Wunused-variable]
  155 |  ll z,n,m,t,k,i,j,l,d,h,r;
      |           ^
apple.cpp:155:13: warning: unused variable 'k' [-Wunused-variable]
  155 |  ll z,n,m,t,k,i,j,l,d,h,r;
      |             ^
apple.cpp:155:15: warning: unused variable 'i' [-Wunused-variable]
  155 |  ll z,n,m,t,k,i,j,l,d,h,r;
      |               ^
apple.cpp:155:17: warning: unused variable 'j' [-Wunused-variable]
  155 |  ll z,n,m,t,k,i,j,l,d,h,r;
      |                 ^
apple.cpp:155:23: warning: unused variable 'h' [-Wunused-variable]
  155 |  ll z,n,m,t,k,i,j,l,d,h,r;
      |                       ^
# 결과 실행 시간 메모리 Grader output
1 Correct 92 ms 235080 KB Output is correct
2 Correct 96 ms 235120 KB Output is correct
3 Correct 98 ms 235080 KB Output is correct
4 Correct 109 ms 235276 KB Output is correct
5 Correct 121 ms 235340 KB Output is correct
6 Correct 108 ms 235276 KB Output is correct
7 Correct 103 ms 235272 KB Output is correct
8 Correct 190 ms 236100 KB Output is correct
9 Correct 319 ms 237400 KB Output is correct
10 Correct 315 ms 237356 KB Output is correct
11 Correct 318 ms 237252 KB Output is correct
12 Correct 319 ms 237216 KB Output is correct
13 Correct 273 ms 237672 KB Output is correct
14 Correct 265 ms 237700 KB Output is correct
15 Correct 370 ms 237836 KB Output is correct
16 Correct 362 ms 237772 KB Output is correct
17 Correct 272 ms 237716 KB Output is correct
18 Correct 284 ms 237720 KB Output is correct
19 Correct 389 ms 237900 KB Output is correct
20 Correct 406 ms 237896 KB Output is correct