結果
問題 | No.878 Range High-Element Query |
ユーザー |
![]() |
提出日時 | 2019-09-06 21:52:31 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 15 ms / 2,000 ms |
コード長 | 2,842 bytes |
コンパイル時間 | 2,324 ms |
コンパイル使用メモリ | 213,032 KB |
最終ジャッジ日時 | 2025-01-07 16:46:45 |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 18 |
ソースコード
#pragma GCC optimize ("Ofast")#include<bits/stdc++.h>using namespace std;inline void rd(int &x){int k, m=0;x=0;for(;;){k = getchar_unlocked();if(k=='-'){m=1;break;}if('0'<=k&&k<='9'){x=k-'0';break;}}for(;;){k = getchar_unlocked();if(k<'0'||k>'9'){break;}x=x*10+k-'0';}if(m){x=-x;}}inline void wt_L(char a){putchar_unlocked(a);}inline void wt_L(int x){char f[10];int m=0, s=0;if(x<0){m=1;x=-x;}while(x){f[s++]=x%10;x/=10;}if(!s){f[s++]=0;}if(m){putchar_unlocked('-');}while(s--){putchar_unlocked(f[s]+'0');}}int N;int Q;int A[100000];int T;int L;int R;int go[20][100000];int main(){int KL2GvlyY, i, j, k;rd(N);rd(Q);{int Lj4PdHRW;for(Lj4PdHRW=0;Lj4PdHRW<(N);Lj4PdHRW++){rd(A[Lj4PdHRW]);}}for(j=0;j<(20);j++){go[j][N-1] = N;}for(i=N-2;i>=0;i--){if(A[i] < A[i+1]){go[0][i] = i+1;}else{k = i+1;for(;;){if(go[0][k]==N){go[0][i] = N;break;}if(A[go[0][k]] > A[i]){go[0][i] = go[0][k];break;}for(j=(1);j<(20);j++){if(go[j][k]==N || A[go[j][k]] > A[i]){break;}}k = go[j-1][k];}}for(j=(1);j<(20);j++){if(go[j-1][i]==N){go[j][i] = N;}else{go[j][i] = go[j-1][go[j-1][i]];}}}for(KL2GvlyY=0;KL2GvlyY<(Q);KL2GvlyY++){rd(T);rd(L);L += (-1);rd(R);R += (-1);k = 0;for(;;){if(go[0][L] > R){k++;break;}for(j=0;j<(19);j++){if(go[j+1][L] > R){break;}}k += (1<<j);L = go[j][L];}wt_L(k);wt_L('\n');}return 0;}// cLay varsion 20190902-1// --- original code ---// int N, Q, A[1d5], T, L, R;// int go[20][1d5];//// {// int i, j, k;//// rd(N,Q,A(N));// rep(j,20) go[j][N-1] = N;// for(i=N-2;i>=0;i--){// if(A[i] < A[i+1]){// go[0][i] = i+1;// } else {// k = i+1;// for(;;){// if(go[0][k]==N) go[0][i] = N, break;// if(A[go[0][k]] > A[i]) go[0][i] = go[0][k], break;// rep(j,1,20) if(go[j][k]==N || A[go[j][k]] > A[i]) break;// k = go[j-1][k];// }// }//// rep(j,1,20){// if(go[j-1][i]==N) go[j][i] = N;// else go[j][i] = go[j-1][go[j-1][i]];// }// }//// rep(Q){// rd(T,L--,R--);// k = 0;// for(;;){// if(go[0][L] > R) k++, break;// rep(j,19) if(go[j+1][L] > R) break;// k += (1<<j);// L = go[j][L];// }// wt(k);// }//// }