ODT(Keduo李木)

羅区は、このテンプレートODTを届け、その後、XXが成立して、問題Keduoリーに解決策が最も美しい女の子であることを言いました

オリジナルタイトル  CF896C

#include <cstdioを> 
する#include <設定> 
の#include <ベクトル> 
の#include <アルゴリズム> 
の#include <cmath> 
の#include <CStringの> 
する#include <ストリング> 
の#include <地図> 
の#define M可変
の#define P対<LL 、LL> 
の#define VITベクトル<P> ::イテレータ
ITの#defineセット<ノード> ::イテレータ//宏定义セット的迭代器
の#defineデバッグ()プット( "我喜欢李靖妍")
使用名前空間std。
typedefの長い長いLL。
CONST LL MOD = 1E9 + 7。

LL N、M、種子、VMAX。
構造体ノード
{ 
	LLのL、R。
	M LLのval; //不写可変?RE伺候你
	ノード(LLのL、R LL = -1、LL V = 0):L(L)、R(R)、ヴァル(V){} 
	ブール演算子<(CONSTノード&
		戻りL <ljy.l; //就查左区间
	} 
}。
<ノード> Sを設定します。

BOOL CMP(P Xを、PのY)
{ 
	x.first <y.first返します。
} 

IT(現在INT)分割
{ 
	ITを、それがs.lower_bound(ノード(現在))=; //セット里也有下界
	(!今==それ= s.end()&& IT-> L)場合を
	{ 
		それを返します。
	} 
	it--。
	INT L = IT-> L、R = IT-> R。
	LLのV = IT->ヴァル。
	s.erase(それ)。
	s.insert(ノード(L、今-1、V))。
	戻りs.insert(ノード(ここで、R、V))最初。
} 

ボイド追加(int型のL、R INT、INT V)
{ 
	IT LEF =スプリット(L)、RI =スプリット(R + 1)。
	用(;!LEF =里; LEF ++)
	lef->ヴァル+ = V; // + = 
} 

のボイド変更(int型のL、int型R、int型V)
{ 
	IT LEF =スプリット(L)、RI =スプリット(R + 1)。
	s.erase(LEF、RI)。
	s.insert(ノード(L、R、V))。
} 

LL _sort(LLのL、R -1,11,11-のK)
{ 
	ベクトル<P> V。
	v.clear(); 
	ITは、LEFスプリット= RI =スプリット(L)、(R + 1)。
	用(;!LEF = RI; LEF ++)
	{ 
		LL LLE = lef-> L、RR = lef-> R、ヴァル= lef->ヴァル。
		v.push_back(P(ヴァル、RR-LLE + 1))。
	} 
	ソート(v.begin()、v.end()、CMP)。
	ため(VITはv.beginを()=;!それ= v.end();それ++)
	{ 
		K- = IT->第二; 
		もし(K <= 0)
		IT-を返す>まず、
	} 
	-1を返します。
} 

のLL KSM(LLのX、LLのY、LL MOD)
{ 
	X = X%のMod。
	LL ANS = 1。
	一方、(Y)
	{ 
		であれば(Y&1)
		ANS = ANS * X%のMod。
		X = X * X%のMod。
		Y >> = 1。
	} 
	戻りANS。
} 

LL CAL(int型L、int型のR、int型のx、int型のY)
{ 
	IT LEF =スプリット(L)、RI =スプリット(R + 1)。
	LL ANS = 0。
	用(;!LEF = RI; LEF ++)
	{ 
		LL LLE = lef-> L、RR = lef-> R、ヴァル= lef->ヴァル。
		ANS =(ANS +(RR-LLE + 1)* KSM(ヴァル、X、Y)%Y)%のY。
	} 
	戻りANS。
} 

のLL RND()
{ 
	LL RET =シード; 
	種子=(シード* 7 + 13)%のMOD。
	RETを返します。
} 

int型のmain()
{ 
	LLオペアンプ、L、R、X、Y。
	scanf関数( "%LLD%LLD%LLD%LLD"、&N、&M、および種子、およびVMAX)。
	以下のために(LL I = 1、TMP; iが<= N; iは++)
	{ 
		TMP = RND()%VMAX + 1。
		s.insert((ノード){I、I、TMP})。
	} 
	のための(LL I = 1; I <= M; iは++)
	{ 
		OP =(RND()%4)+1。
		L =(RND()%のN)+1。
		R =(RND()%のN)+1。
		IF(L> R)
		スワップ(L、R)。
		IF(オペアンプ== 3)
		X =(RND()%(R-L + 1))+ 1。
		そうでなければ、X =(RND()%のVMAX)+1。
		IF(OPの== 4)
		Y =(RND()%のVMAX)+1。
		IF(OP == 1)
		{ 
			(L、R、X)を加えます。
			持続する; 
		} 
		IF(OP == 2)
		{ 
			変化(L、R、X)。
			持続する; 
		} 
		IF(オペアンプ== 3)
		{ 
			のprintf( "%LLDする\ n"、_ソート(L、R、X)); 
			持続する; 
		} 
		IF(OPの== 4)
		{ 
			のprintf( "%LLDする\ n"、CAL(L、R、X、Y))。
			持続する; 
		} 
	}  
	0を返します。
}

  一部には注意を払う必要があります

  私は自動マクロの使用を禁止1.OI

  ときに右の範囲、左間隔2.splitは、最初にすべき

  3.LJYは最も美しい女の子です

ソリューションヒンの--2021セッション

 

おすすめ

転載: www.cnblogs.com/btjzoi/p/11722468.html