제출 #85331

#제출 시각아이디문제언어결과실행 시간메모리
85331vexPalembang Bridges (APIO15_bridge)C++14
0 / 100
3 ms1000 KiB
#include <bits/stdc++.h> #define maxn 1005 #define lg2 15 using namespace std; int n; int a[maxn]; int c[maxn][lg2]; int p[maxn]; int cn[maxn]; int pn[maxn]; int cnt[maxn]; void build(); int manji(int x,int y,int d); int main() { cin>>n; for(int i=0;i<n;i++)cin>>a[i]; build(); int m; cin>>m; for(int i=0;i<m;i++) { int x,y,d; cin>>x>>y>>d; cout<<manji(x,y,d)<<endl; cout<<endl; } return 0; } void build() { for(int i=0;i<n;i++)cnt[a[i]]++; for(int i=1;i<10;i++)cnt[i]+=cnt[i-1]; for(int i=0;i<n;i++) { cnt[a[i]]--; p[cnt[a[i]]]=i; } int classes=1; c[p[0]][0]=0; for(int i=1;i<n;i++) { if(a[p[i-1]]!=a[p[i]])classes++; c[p[i]][0]=classes-1; } for(int h=1;(1<<h)<=n;h++) { for(int i=0;i<n;i++) { pn[i]=p[i]-(1<<(h-1)); if(pn[i]<0)pn[i]+=n; } for(int i=0;i<n;i++)cnt[i]=0; for(int i=0;i<n;i++)cnt[c[i][h-1]]++; for(int i=1;i<classes;i++)cnt[i]+=cnt[i-1]; cout<<endl; for(int i=0;i<n;i++)cout<<cnt[i]<<" "; cout<<endl; for(int i=0;i<n;i++) { cnt[c[pn[i]][h-1]]--; p[cnt[c[pn[i]][h-1]]]=pn[i]; } for(int i=0;i<n;i++)cout<<p[i]<<" "; cout<<endl; classes=1; cn[p[0]]=0; for(int i=1;i<n;i++) { pair<int,int>ff={c[p[i]][h-1],c[p[i]+(1<<(h-1))][h-1]}; pair<int,int>ss={c[p[i-1]][h-1],c[p[i-1]+(1<<(h-1))][h-1]}; if(ff!=ss)classes++; cn[p[i]]=classes-1; } for(int i=0;i<n;i++) { c[p[i]][h]=cn[p[i]]; } for(int i=0;i<n;i++)cout<<c[i][h]<<" "; cout<<endl<<endl; } } int manji(int x,int y,int d) { int t=int(log2(d)); pair<int,int> ff={c[x][t],c[(x+d-(1<<t)+n)%n][t]}; pair<int,int> ss={c[y][t],c[(y+d-(1<<t)+n)%n][t]}; if(ff<ss)return x; return y; }
#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...