https://nanti.jisuanke.com/t/41384
あるNN n点からインデックスを持つ配列に11 〜1 NN N、及びこれらのポイントには2つの動作があります。
1:×1×1 \ 1 のxポイントマーキングXXのxは使用できません。
2:2×2 \ X 2 (含むその時点の後の最初の利用可能なポイントのインデックスのXクエリXX 自体X)。
入力
NQN \クワッドグラムのn グラム
z1x1z_1 \クワッドX_1のZ 1 のx 1
⋮\ vdots ⋮
zqxqz_q \クワッドx_q Z のq のx Q
QQのqは照会の数であり、ZZのZは、操作のタイプであり、XXのXは、操作の指標です。1≤x<N <1091≤x<N <10 ^ 9 1 ≤ X < N < 1 0 9、1≤q<1061当量のQ <10 ^ 6 \ 1 ≤ Q < 1 0 6およびZZのzは11 1または22 2
出力
出力各クエリのための答え。
サンプル入力
5 3 1 2 2 2 2 1
サンプル出力
3 ことを意図タイトル:1-N、Q動作与える最初の操作(1):値が使用不可としてマークするステップと、第2の動作(2):値の後の最初の値の有用な出力。マジックコンパイラ:遼によるc ++ 14タイムアウト、C ++ 11のパス。
#include <iostreamの> する#include <cstdioを> する#include <CStringの> する#include <アルゴリズム> の#include <cmath> の#include < 設定 > 使用して 名前空間STD。 #define MEM(A)のmemset(0、はsizeof(A)) の#defineっ長い長 のconst int型 MAXN = 100100 。 INTのN、Q、B。 設定 < 整数 > 秒; INT ()解決 { 一方、(B <= n)を { 場合(s.find(B)!= s.end()) B ++; 他の リターンB; } リターン - 1 。 } int型のmain() { scanf関数(" %D%dの"、&N、&Q)。 以下のために(int型私= 0 ; iがQを<; Iは++ ) { scanf関数(" %D%D "、&、&B)。 もし(== 1 ) { s.insert(B)。 } 他 { のprintf(" %Dを\ n "解決()); // s.countがあるか否かを判断することができます。 / * 一方(s.count(B)) { B ++; } のprintf( "%Dの\のN-"、B); * / } } 戻り 0 ; }
unordered_map使用するマップタイムアウト
#include <iostreamの> する#include <cstdioを> する#include <CStringの> する#include <アルゴリズム> の#include <cmath> の#include < 設定 > の#include <unordered_map> 使用して 名前空間STD。 #define MEM(A)のmemset(0、はsizeof(A)) の#defineっ長い長 のconst int型 MAXN = 100100 。 INTのN、Q、B。 INT メイン() { unordered_map < int型、整数 > ;融点 scanf関数(" %D%D"&N、& Q); のための(int型 I = 0を Iは、Qを<; Iは++ ) { scanf関数(" %D%dの"、&、&B); 場合(== 1 ) { MP [B] = - 1 ; } そうでなければ { 一方(MP [B] == - 1)B ++ ; のprintf(" %Dを\ n " 、B); } } 戻り 0 ; }