結果

問題 No.1290 Addition and Subtraction Operation
ユーザー kotatsugamekotatsugame
提出日時 2020-11-13 22:55:04
言語 C++14
(gcc 12.3.0 + boost 1.83.0)
結果
AC  
実行時間 181 ms / 2,000 ms
コード長 2,248 bytes
コンパイル時間 1,092 ms
コンパイル使用メモリ 90,448 KB
実行使用メモリ 14,592 KB
最終ジャッジ日時 2024-07-22 21:54:30
合計ジャッジ時間 6,798 ms
ジャッジサーバーID
(参考情報)
judge3 / judge2
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 3 ms
6,528 KB
testcase_01 AC 3 ms
6,528 KB
testcase_02 AC 4 ms
6,528 KB
testcase_03 AC 3 ms
6,528 KB
testcase_04 AC 3 ms
6,656 KB
testcase_05 AC 4 ms
6,528 KB
testcase_06 AC 3 ms
6,656 KB
testcase_07 AC 3 ms
6,528 KB
testcase_08 AC 3 ms
6,528 KB
testcase_09 AC 3 ms
6,528 KB
testcase_10 AC 4 ms
6,528 KB
testcase_11 AC 3 ms
6,400 KB
testcase_12 AC 4 ms
6,528 KB
testcase_13 AC 4 ms
6,528 KB
testcase_14 AC 4 ms
6,528 KB
testcase_15 AC 4 ms
6,528 KB
testcase_16 AC 4 ms
6,528 KB
testcase_17 AC 3 ms
6,528 KB
testcase_18 AC 3 ms
6,528 KB
testcase_19 AC 4 ms
6,528 KB
testcase_20 AC 3 ms
6,656 KB
testcase_21 AC 4 ms
6,528 KB
testcase_22 AC 3 ms
6,528 KB
testcase_23 AC 4 ms
6,528 KB
testcase_24 AC 4 ms
6,528 KB
testcase_25 AC 3 ms
6,528 KB
testcase_26 AC 3 ms
6,528 KB
testcase_27 AC 3 ms
6,528 KB
testcase_28 AC 3 ms
6,656 KB
testcase_29 AC 4 ms
6,528 KB
testcase_30 AC 3 ms
6,528 KB
testcase_31 AC 4 ms
6,528 KB
testcase_32 AC 4 ms
6,528 KB
testcase_33 AC 4 ms
6,528 KB
testcase_34 AC 4 ms
6,528 KB
testcase_35 AC 4 ms
6,528 KB
testcase_36 AC 3 ms
6,656 KB
testcase_37 AC 4 ms
6,528 KB
testcase_38 AC 4 ms
6,528 KB
testcase_39 AC 4 ms
6,528 KB
testcase_40 AC 4 ms
6,656 KB
testcase_41 AC 4 ms
6,528 KB
testcase_42 AC 49 ms
7,316 KB
testcase_43 AC 49 ms
7,424 KB
testcase_44 AC 49 ms
7,424 KB
testcase_45 AC 50 ms
7,424 KB
testcase_46 AC 48 ms
7,424 KB
testcase_47 AC 49 ms
7,424 KB
testcase_48 AC 49 ms
7,424 KB
testcase_49 AC 49 ms
7,424 KB
testcase_50 AC 49 ms
7,296 KB
testcase_51 AC 49 ms
7,320 KB
testcase_52 AC 49 ms
7,424 KB
testcase_53 AC 49 ms
7,424 KB
testcase_54 AC 49 ms
7,552 KB
testcase_55 AC 49 ms
7,424 KB
testcase_56 AC 49 ms
7,424 KB
testcase_57 AC 42 ms
10,968 KB
testcase_58 AC 57 ms
11,592 KB
testcase_59 AC 40 ms
11,008 KB
testcase_60 AC 113 ms
14,336 KB
testcase_61 AC 84 ms
12,832 KB
testcase_62 AC 93 ms
13,140 KB
testcase_63 AC 56 ms
11,520 KB
testcase_64 AC 26 ms
10,368 KB
testcase_65 AC 34 ms
10,752 KB
testcase_66 AC 67 ms
12,032 KB
testcase_67 AC 120 ms
14,592 KB
testcase_68 AC 85 ms
13,056 KB
testcase_69 AC 58 ms
11,608 KB
testcase_70 AC 52 ms
11,392 KB
testcase_71 AC 64 ms
11,748 KB
testcase_72 AC 34 ms
10,752 KB
testcase_73 AC 75 ms
12,288 KB
testcase_74 AC 23 ms
10,368 KB
testcase_75 AC 30 ms
10,544 KB
testcase_76 AC 53 ms
11,280 KB
testcase_77 AC 158 ms
12,988 KB
testcase_78 AC 142 ms
12,416 KB
testcase_79 AC 97 ms
11,264 KB
testcase_80 AC 181 ms
14,152 KB
testcase_81 AC 178 ms
14,080 KB
testcase_82 AC 85 ms
11,764 KB
testcase_83 AC 128 ms
14,080 KB
testcase_84 AC 119 ms
13,568 KB
testcase_85 AC 58 ms
10,728 KB
testcase_86 AC 45 ms
10,376 KB
権限があれば一括ダウンロードができます
コンパイルメッセージ
a.cpp:10:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]

ソースコード

diff #

#line 1 "a.cpp"
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
#line 2 "/home/kotatsugame/library/datastructure/dualsegtree.cpp"
#include<functional>
template<typename T>
struct dualsegtree{
	using F=function<T(T,T)>;
	const F lazycalcfn,updatefn;
	int n;
	T lazydefvalue;
	vector<T>dat,lazy;
	vector<bool>lazyflag;
	dualsegtree(int n_=0,T defvalue=0,
		const F lazycalcfn_=[](T a,T b){return a+b;},
		const F updatefn_=[](T a,T b){return a+b;},
		T lazydefvalue_=0
	):lazydefvalue(lazydefvalue_),
		lazycalcfn(lazycalcfn_),updatefn(updatefn_)
	{
		n=1;
		while(n<n_)n<<=1;
		dat.assign(n,defvalue);
		lazy.assign(n-1,lazydefvalue);
		lazyflag.assign(n-1,false);
	}
	void copy(const vector<T>&v)
	{
		for(int i=0;i<v.size();i++)dat[i]=v[i];
		lazy.assign(n-1,lazydefvalue);
		lazyflag.assign(n-1,false);
	}
	void update(int a,int b,T x,int k=0,int l=0,int r=-1)//[a,b)
	{
		if(r<0)r=n;
		if(b<=l||r<=a)return;
		else if(a<=l&&r<=b)
		{
			if(k<n-1)
			{
				lazy[k]=lazycalcfn(lazy[k],x);
				lazyflag[k]=true;
			}
			else dat[k-n+1]=updatefn(dat[k-n+1],x);
		}
		else
		{
			if(lazyflag[k])
			{
				update(0,n,lazy[k],k*2+1,l,(l+r)/2);
				update(0,n,lazy[k],k*2+2,(l+r)/2,r);
				lazy[k]=lazydefvalue;
				lazyflag[k]=false;
			}
			update(a,b,x,k*2+1,l,(l+r)/2);
			update(a,b,x,k*2+2,(l+r)/2,r);
		}
	}
	T query(int i)
	{
		T ret=dat[i];
		i+=n-1;
		while(i>0)
		{
			i=(i-1)/2;
			if(lazyflag[i])ret=updatefn(ret,lazy[i]);
		}
		return ret;
	}
};
#line 6 "a.cpp"
int N,M;
long B[1<<17];
vector<int>E[1<<17];
int R[1<<17];
main()
{
	cin>>N>>M;
	for(int i=0;i<N;i++)
	{
		cin>>B[i];
		if(i%2)B[i]=-B[i];
		R[i]=-1;
	}
	for(int i=0;i<M;i++)
	{
		int L,R;cin>>L>>R;
		L--;
		E[L].push_back(R);
	}
	for(int i=0;i<N;i++)if(!E[i].empty())
	{
		sort(E[i].begin(),E[i].end());
		R[i]=E[i][0];
		for(int j=1;j<E[i].size();j++)
		{
			int l=E[i][j-1],r=E[i][j];
			if(l<r)
			{
				E[l].push_back(r);
			}
		}
	}
	dualsegtree<long>P(N,0,[](long a,long b){return a+b;},[](long a,long b){return a+b;});
	P.copy(vector<long>(B,B+N));
	for(int i=0;i<N;i++)
	{
		long T=P.query(i);
		if(R[i]==-1)
		{
			if(T!=0)
			{
				cout<<"NO"<<endl;
				return 0;
			}
		}
		else
		{
			P.update(i,R[i],-T);
		}
	}
	cout<<"YES"<<endl;
}
0