Submission #510948

#TimeUsernameProblemLanguageResultExecution timeMemory
510948amukkalirBridges (APIO19_bridges)C++17
0 / 100
7 ms1260 KiB
#include <bits/stdc++.h>
using namespace std; 
typedef long long ll; 
#define pii pair<int,int> 
#define fi first 
#define se second 
#define pb push_back 
#define mp make_pair

const int INF = 1e9+1000; 
const int nax = 1000; 
int n, m; 
int a[nax+5]; 
int tree[4*nax+5]; 
vector<pair<int,pii>> b; 

int merge(int a, int b) {
    return min(a,b); 
}

void build(int idx, int l, int r) {
    if(r==l) {
        tree[idx] = a[l]; 
    }
    else {
        int m = (l+r) >> 1; 

        build(idx<<1,l,m); 
        build(idx<<1|1, m+1, r); 

        tree[idx] = merge(tree[idx<<1], tree[idx<<1|1]); 
    }
}

void upd(int idx, int l, int r, int where, int val) {
    if(r==l) tree[idx] = val; 
    else if (l <= where && where <= r) {
        int m = (l+r) >> 1; 

        upd(idx<<1, l, m, where, val); 
        upd(idx<<1|1, m+1, r, where, val); 

        tree[idx] = merge(tree[idx<<1], tree[idx<<1|1]);
    }
}

int rmq(int idx, int l, int r, int from, int to) {
    if(to < l || from > r) return INF; 
    else if(from <= l && r <= to) {
        //cerr << l << " " << r << " returns " << tree[idx] << endl; 
        return tree[idx]; 
    }
    else {
        int m = (l+r) >> 1; 
        int ret = merge(rmq(idx<<1,l,m,from,to), rmq(idx<<1|1,m+1,r,from,to)); 
        //cerr << l << " " << r << " returns " << ret << endl; 
        return ret; 
    }
}

int rmost (int x, int w) {
//cerr << " :: " << x << " " << w << endl; 

    int lo = x, hi = n-1; 
    int ret = x; 

    while(lo <= hi) {
        int mid = (lo+hi)/2; 
//cerr << mid << "? " << rmq(1, 1, n, x, mid) << endl; 
        if(w <= rmq(1, 1, n, x, mid)) {
            ret = mid+1; 
            lo = mid+1; 
        } else {
            hi = mid-1; 
        }
    }
    return ret; 
}

int lmost (int x, int w) {
    int lo = 1, hi = x; 
    int ret = x; 
    while(lo <= hi) {
        int mid = (lo+hi)/2; 
        if(w <= rmq(1,1,n,mid,x)) {
            ret = mid; 
            hi = mid-1; 
        } else {
            lo = mid+1; 
        }
    }
    return ret; 
}

signed main () {
    scanf("%d %d", &n, &m); 

    b.pb(mp(0, mp(0,0))); 
    for(int i=1; i<=m; i++) {
        int u, v, d; 
        scanf("%d %d %d", &u,&v,&d); 
        a[u] = d; 
        b.pb(mp(d, mp(u, v))); 
    }

    build(1, 1, n); 

    int q; scanf("%d", &q); 
    while(q--) {
        int tp; scanf("%d", &tp); 
        int x, w; scanf("%d%d", &x, &w); 

        if(tp==1) {
            b[x].fi = w; 
            upd(1, 1, n, b[x].se.fi, w); 
        } else {    
            int l = lmost(x, w); 
            int r = rmost(x, w); 
//cerr <<  " >> " << l << "  " << r << endl; 
            int c = r-l+1; 
            
            printf("%d\n", c); 
        }
    }
}

Compilation message (stderr)

bridges.cpp: In function 'int main()':
bridges.cpp:96:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   96 |     scanf("%d %d", &n, &m);
      |     ~~~~~^~~~~~~~~~~~~~~~~
bridges.cpp:101:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  101 |         scanf("%d %d %d", &u,&v,&d);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~~
bridges.cpp:108:17: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  108 |     int q; scanf("%d", &q);
      |            ~~~~~^~~~~~~~~~
bridges.cpp:110:22: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  110 |         int tp; scanf("%d", &tp);
      |                 ~~~~~^~~~~~~~~~~
bridges.cpp:111:24: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  111 |         int x, w; scanf("%d%d", &x, &w);
      |                   ~~~~~^~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...