結果

問題 No.875 Range Mindex Query
ユーザー ateate
提出日時 2019-09-06 21:46:28
言語 C++17
(gcc 12.3.0 + boost 1.83.0)
結果
WA  
実行時間 -
コード長 2,300 bytes
コンパイル時間 2,114 ms
コンパイル使用メモリ 211,432 KB
実行使用メモリ 8,824 KB
最終ジャッジ日時 2024-06-24 17:25:53
合計ジャッジ時間 4,320 ms
ジャッジサーバーID
(参考情報)
judge3 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
5,248 KB
testcase_01 WA -
testcase_02 WA -
testcase_03 WA -
testcase_04 WA -
testcase_05 WA -
testcase_06 WA -
testcase_07 WA -
testcase_08 WA -
testcase_09 WA -
testcase_10 WA -
testcase_11 WA -
testcase_12 WA -
testcase_13 WA -
testcase_14 WA -
testcase_15 WA -
testcase_16 AC 205 ms
8,780 KB
testcase_17 WA -
testcase_18 WA -
権限があれば一括ダウンロードができます
コンパイルメッセージ
main.cpp:71:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   71 | main(){
      | ^~~~

ソースコード

diff #

#include<bits/stdc++.h>
using namespace std;

#define rep(i,n) for(ll i=0;i<(n);++i)
#define reps(i,n) for(ll i=1;i<=(n);++i)
using ll = long long;
using str = string;
constexpr long long INF = (1LL<<60);
constexpr long long MOD = (1e9+7);
template<class T>inline T gcd(T a,T b){if(b==0)return a; return(gcd(b,a%b));}
template<class T>inline T lcm(T a,T b){return a/gcd(a,b)*b;}
template<class T>inline bool chmax(T &a,const T &b){if(a<b){a=b;return true;}return false;}
template<class T>inline bool chmin(T &a,const T &b){if(a>b){a=b;return true;}return false;}
inline void dump(){cout<<endl;}
template<class Head,class... Tail>inline void dump(Head&& head, Tail&&... tail){cout<<head<<", ";dump(forward<Tail>(tail)...);}
template<typename T>inline istream &operator>>(istream&input,vector<T>&v){for(auto &elemnt:v)input>>elemnt;return input;}

// usi tree
class Segment_Tree {
private:
  ll n=1;
  using P=pair<ll,ll>;
  P init = P(INF,0);
  std::vector<P> node;
  P f(P x,P y){
    return x.first<y.first?x:y;
  }
public:
  Segment_Tree(std::vector<ll> v){
    ll sz = ((ll)v.size());    
    while(n<sz)n<<=1;
    node.resize(n*2-1,init);
    for(ll i=0;i<sz;++i)node[i+n-1]=P(v[i],i+1);
    for(ll i=n-2;i>=0;--i)node[i]=f(node[i*2+1],node[i*2+2]);
  }
  void update(ll idx,ll x){
    idx+=n-1;
    node[idx].first=x;
    while(idx){
      idx--;idx>>=1;
      node[idx]=f(node[idx*2+1],node[idx*2+2]);
    }
  }
  void swap(ll l,ll r){
    node[l+n-1].first=r;
    node[r+n-1].first=l;
    l+=n-1;
    r+=n-1;
    while(l){
      l--;l>>=1;
      node[l]=f(node[l*2+1],node[l*2+2]);
    }
    while(r){
      r--;r>>=1;
      node[r]=f(node[r*2+1],node[2*r+2]);
    }
  }
  auto query(ll a,ll b,ll k=0,ll l=0,ll r=-1){
    if(r<0)r=n;
    if(r<=a || b<=l)return init;
    if(a<=l && r<=b)return node[k];
    else{
      auto vl = query(a,b,2*k+1,l,(l+r)/2);
      auto vr = query(a,b,2*k+2,(l+r)/2,r);
      return f(vl,vr);
    }
  }
  
};

main(){
  cin.tie(0);
  ios::sync_with_stdio(0);
  cout<<fixed<<setprecision(10);
  
  ll n,q;
  cin>>n>>q;
  vector<ll> a(n);
  cin>>a;
  Segment_Tree seg(a);
  rep(i,q){
    ll x,l,r;
    cin>>x>>l>>r;
    l--;r--;
    if(x==1){
      seg.swap(l,r);
    }
    else{
      auto tmp=seg.query(l,r+1);
      cout<<tmp.second<<endl;
    }
  }
  
  
  
}
0