Submission #934105

#TimeUsernameProblemLanguageResultExecution timeMemory
934105vjudge1Bridges (APIO19_bridges)C++98
29 / 100
440 ms3164 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef unsigned long long ull; int arr[50001]; struct ST{ int tree[200001]; void build(int node, int l, int r){ if(l==r){ tree[node]=arr[l]; return; } build(2*node+1, l, (l+r)/2); build(2*node+2, (l+r)/2+1, r); tree[node]=min(tree[2*node+1], tree[2*node+2]); } void update(int node, int l, int r, int pos, int x){ if(r<pos || l>pos) return; if(l==r){ tree[node]=x; return; } update(2*node+1, l, (l+r)/2, pos, x); update(2*node+2, (l+r)/2+1, r, pos, x); tree[node]=min(tree[2*node+1], tree[2*node+2]); } int query(int node, int l, int r, int a, int b){ if(l>b || r<a) return (1<<30); if(l>=a && r<=b){ return tree[node]; } return min(query(2*node+1, l, (l+r)/2, a, b), query(2*node+2, (l+r)/2+1, r, a, b)); } }; struct tpos{ int x, w, pos; }; int n, m, q, cnt; ST tree; vector<vector<tpos>> adj; int from[1000], to[1000], peso[1000]; bool used[1000]; void busca(int node, int &w){ used[node]=1; cnt++; for(tpos it: adj[node]){ if(used[it.x]==0 && w<=it.w) busca(it.x, w); } } int buscaizq(int l, int r, int pos, int x){ int mid; while(l<r){ mid=(l+r+1)/2; if(pos-mid>=0 && tree.query(0, 0, n-1, pos-mid, pos-1)>=x) l=mid; else r=mid-1; } return l; } int buscadere(int l, int r, int pos, int x){ int mid; while(l<r){ mid=(l+r+1)/2; if(pos+mid<n && tree.query(0, 0, n-1, pos+1, pos+mid)>=x) l=mid; else r=mid-1; } return l; } void solve(){ cin>> n>> m; if(m==n-1){ int t, a, b, c, x, y; for(int i=0; i<m; i++){ cin>> a>> b>> c; arr[i]=c; } tree.build(0, 0, n-1); cin>> q; for(int i=0; i<q; i++){ cin>> t>> a>> b; a--; if(t==1){ tree.update(0, 0, n-1, a, b); } else{ x=buscaizq(0, n-1, a, b); y=buscadere(0, n-1, a-1, b); cout<< x+y+1<< "\n"; } } } else{ adj.resize(n+1); for(int i=0; i<m; i++){ cin>> from[i]>> to[i]>> peso[i]; from[i]--; to[i]--; adj[from[i]].push_back({to[i], peso[i], i}); adj[to[i]].push_back({from[i], peso[i], i}); } cin>> q; int t, a, b; for(int i=0; i<q; i++){ cin>> t>> a>> b; if(t==1){ a--; for(int j=0; j<adj[from[a]].size(); j++){ if(adj[from[a]][j].pos==a){ adj[from[a]][j].w=b; break; } } for(int j=0; j<adj[to[a]].size(); j++){ if(adj[to[a]][j].pos==a){ adj[to[a]][j].w=b; break; } } } else{ cnt=0; a--; busca(a, b); cout<< cnt<< "\n"; memset(used, 0, sizeof(used)); } } } } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cin.tie(0); int t=1; //cin>> t; while(t--){ solve(); } return 0; }

Compilation message (stderr)

bridges.cpp: In function 'void solve()':
bridges.cpp:126:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<tpos>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  126 |                 for(int j=0; j<adj[from[a]].size(); j++){
      |                              ~^~~~~~~~~~~~~~~~~~~~
bridges.cpp:132:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<tpos>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  132 |                 for(int j=0; j<adj[to[a]].size(); j++){
      |                              ~^~~~~~~~~~~~~~~~~~
#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...