Submission #50974

#TimeUsernameProblemLanguageResultExecution timeMemory
50974model_code단층 (JOI16_ho_t5)C++17
100 / 100
766 ms15516 KiB
#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
typedef long long ll;
#define SIZE 262144
class segtree
{
public:
	ll seg[SIZE*2];
	ll flag[SIZE*2];
	void update(int beg,int end,int node,int lb,int ub,ll num)
	{
		if(ub<beg||end<lb)return;
		if(beg<=lb&&ub<=end)
		{
			flag[node]+=num;
			return;
		}
		if(flag[node])
		{
			flag[node*2]+=flag[node];
			flag[node*2+1]+=flag[node];
			flag[node]=0;
		}
		update(beg,end,node*2,lb,(lb+ub)/2,num);
		update(beg,end,node*2+1,(lb+ub)/2+1,ub,num);
	}
	ll get(int pl,int node,int lb,int ub)
	{
		if(pl==lb&&ub==pl)
		{
			return flag[node];
		}
		if(flag[node])
		{
			flag[node*2]+=flag[node];
			flag[node*2+1]+=flag[node];
			flag[node]=0;
		}
		if(pl<=(lb+ub)/2)return get(pl,node*2,lb,(lb+ub)/2);
		else return get(pl,node*2+1,(lb+ub)/2+1,ub);
	}
};
segtree tree1,tree2;
typedef pair<ll,ll>pii;
typedef pair<ll,pii>pi3;
int main()
{
	int num,query;
	scanf("%d%d",&num,&query);
	for(int i=1;i<=SIZE-1;i++)
	{
		tree1.update(i,i,1,0,SIZE-1,i);
		tree2.update(i,i,1,0,SIZE-1,-i);
	}
	vector<pi3>vec;
	for(int i=0;i<query;i++)
	{
		int za,zb;
		ll zc;
		scanf("%d%d%lld",&za,&zb,&zc);
		vec.push_back(make_pair(za,make_pair(zb,zc)));
	}
	reverse(vec.begin(),vec.end());
	for(int i=0;i<query;i++)
	{
		if(vec[i].second.first==1)
		{
			int beg=0,end=SIZE-1;
			for(;;)
			{
				int med=(beg+end)/2+1;
				if(tree2.get(med,1,0,SIZE-1)<-vec[i].first)end=med-1;
				else beg=med;
				if(beg==end)
				{
					tree1.update(0,beg,1,0,SIZE-1,-vec[i].second.second*2);
					break;
				}
			}
		}
		else
		{
			int beg=0,end=SIZE-1;
			for(;;)
			{
				int med=(beg+end)/2+1;
				if(tree1.get(med,1,0,SIZE-1)>vec[i].first)end=med-1;
				else beg=med;
				if(beg==end)
				{
					tree2.update(beg+1,SIZE-1,1,0,SIZE-1,-vec[i].second.second*2);
					break;
				}
			}
		}
	}
	for(int i=1;i<=num;i++)printf("%lld\n",-(tree1.get(i,1,0,SIZE-1)+tree2.get(i,1,0,SIZE-1))/2);
}

Compilation message (stderr)

2016_ho_t5.cpp: In function 'int main()':
2016_ho_t5.cpp:51:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d",&num,&query);
  ~~~~~^~~~~~~~~~~~~~~~~~~~
2016_ho_t5.cpp:62:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d%d%lld",&za,&zb,&zc);
   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...