제출 #1257899

#제출 시각아이디문제언어결과실행 시간메모리
1257899nicecoder37Fountain (eJOI20_fountain)C++20
0 / 100
120 ms36376 KiB
#pragma GCC optimize("O3,unroll-loops") #pragma GCC target("avx,avx2,fma") #include <bits/stdc++.h> #define fast ios_base::sync_with_stdio(false),cin.tie(NULL),cout.tie(NULL) #define fi first #define se second #define space " " #define endl "\n" #define gcd __gcd #define mp make_pair #define pb push_back #define pf push_front #define lb lower_bound #define ub upper_bound #define md 1000000007 #define inf 1000000000 #define li 100005 #define int long long using namespace std; int T,Q,n,m,d[li],c[li],subtree[li],lca[li][25],x,y; string s,t; vector<int> v[li]; set<pair<int,int> > st; void dfs(int node,int ata){ lca[node][0]=ata; //~ printf("Child Costs: %d %d %d %d\n",node,ata,subtree[node],subtree[ata]); subtree[node]+=subtree[ata]; for(int i=0;i<(int)v[node].size();i++){ int go=v[node][i]; if(go==ata) continue; dfs(go,node); } } int32_t main(){ scanf("%lld %lld",&n,&Q); for(int i=1;i<=n;i++){ scanf("%lld %lld",&d[i],&c[i]); subtree[i]=c[i]; } d[n+1]=inf+1; c[n+1]=0; st.insert(mp(d[n+1],n+1)); for(int i=n;i>=1;i--){ while((int)st.size()){ pair<int,int> temp=*st.begin(); if(temp.fi<=d[i])st.erase(st.begin()); else break; } pair<int,int> temp=*st.begin(); v[i].pb(temp.se); v[temp.se].pb(i); st.insert(mp(d[i],i)); //~ printf("Edges: %d %d\n",i,temp.se); } dfs(n+1,0); for(int i=1;i<=n+1;i++){ for(int j=1;j<=20;j++){ lca[i][j]=lca[lca[i][j-1]][j-1]; } } while(Q--){ scanf("%lld %lld",&x,&y); //~ printf("xD %d\n",subtree[x]); if(subtree[x]<y){printf("0\n"); continue;} int bas=1,son=n; while(bas<=son){ int mid=(bas+son)/2; int sayi=mid,node=x; for(int i=20;i>=0;i--){ if(sayi>=(1ll<<i)){sayi-=(1ll<<i); node=lca[node][i];} } if(subtree[x]-subtree[node]>=y) son=mid-1; else bas=mid+1; } //~ printf("Debuggi %d %d\n",bas,son); for(int i=20;i>=0;i--){ if(son>=(1ll<<i)){son-=(1ll<<i); x=lca[x][i];} } printf("%lld\n",x); } return 0; }

컴파일 시 표준 에러 (stderr) 메시지

fountain.cpp: In function 'int32_t main()':
fountain.cpp:35:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   35 |         scanf("%lld %lld",&n,&Q);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~
fountain.cpp:37:22: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   37 |                 scanf("%lld %lld",&d[i],&c[i]);
      |                 ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
fountain.cpp:62:22: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   62 |                 scanf("%lld %lld",&x,&y);
      |                 ~~~~~^~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...