羅区は、このテンプレート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セッション