Submission #1361931

#TimeUsernameProblemLanguageResultExecution timeMemory
1361931MunkhturErdenebatBridges (APIO19_bridges)C++20
16 / 100
552 ms3436 KiB
#include<bits/stdc++.h>
#include<string.h>
#include <algorithm>
#include <iterator>
#include <set>
#include <stdlib.h>
 #define ll long long
 #define fr first
 #define sc second
 #define pb push_back
 #define YES cout<<"YES"<<endl
 #define NO cout<<"NO"<<endl
 #define endl "\n"
using namespace std;
    ll a,b,c,d,e,f,m,i,j,n,h,g,mid,l,r,ka,t[205005],k[200105];
    map<ll,ll> mee,see;
    map<ll,ll> mii,maa;
    vector<ll> vas[20005],ves;
    string x,y,z,te,to;
    pair<ll,ll> wefe;
    stack<ll> munkh;
    multiset<ll> mul;
  ll tree[50005*4];
void build(ll node, ll l, ll r){
  if(l==r){
    tree[node]=k[l];
  }
  else{
    ll mid=(l+r-1)/2;
    build(node*2,l,mid);
    build(node*2+1,mid+1,r);
    tree[node]=min(tree[node*2],tree[node*2+1]);
  }
}
void update(ll node, ll l, ll r, ll n, ll m){
  if(l>n || r<n){
    return;
  }
  if(l==r){
    tree[node]=m;
  }
  else{
    ll mid=(l+r-1)/2;
    update(node*2,l,mid,n,m);
    update(node*2+1,mid+1,r,n,m);
    tree[node]=min(tree[node*2],tree[node*2+1]);
  }
}
ll query(ll node, ll l, ll r, ll n, ll m){
  if(r<n || l>m){
    return LLONG_MAX;
  }
  if(l>=n && r<=m){
    return tree[node];
  }
  else{
    ll mid=(l+r-1)/2;
    return min(query(node*2,l,mid,n,m),query(node*2+1,mid+1,r,n,m));
  }
}
int main(){
  cin>>a>>b;
  if(b==0){
    cin>>ka;
    while(ka--){
      cin>>a>>b>>c;
      if(a==2){
        cout<<1<<endl;
      }
    }
    return 0;
  }
  for(i=0 ; i<b ; i++){
    cin>>c>>d>>k[i];
  }
  
  build(1,0,b-1);
  cin>>ka;
  while(ka--){
    cin>>e;
    if(e==1){
      cin>>c>>d;
      k[c-1]=d;
      update(1,0,b-1,c-1,d);
    }
    else{
      cin>>c>>d;
      l=c-1;
      r=b-1;
      while(l<r){
        m=(l+r+1)/2;
        if(query(1,0,b-1,c-1,m)>=d){
          l=m;
        }
        else{
          r=m-1;
        }
      }
        if(k[c-1]<d){
          l=c-2;
        }
      ll ans=l-c+2;
      l=0;
      r=c-2;
      while(l<r){
        m=(l+r-1)/2;
        if(query(1,0,b-1,m,c-2)>=d){
          r=m;
        }
        else{
          l=m+1;
        }
      }
      if(k[c-2]<d){
        l=c-1;
      }
      ans+=(c-1)-l;
      ans++;
      cout<<ans<<endl;
    }
  }
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...