제출 #1284218

#제출 시각아이디문제언어결과실행 시간메모리
1284218quan606303Index (COCI21_index)C++20
110 / 110
442 ms24988 KiB
///0-0 : what is your motivation, quan606303? ///quan606303 : Hutao /*idea : */ #include <bits/stdc++.h> #define int long long #define ll long long #define INTMAX INT_MAX #define INTMIN INT_MIN #define LONGMAX LLONG_MAX #define LONGMIN LLONG_MIN #define fi first #define se second #define memfull(a,b) memset(a,b,sizeof(a)); #define endl '\n' #define file(a) freopen(a".inp","r",stdin); freopen(a".out","w",stdout); using namespace std; const int MOD=1e9+7; const int maxn=200005; int BIT[maxn]; int n,q; pair<int,int> a[maxn]; void upd(int x,int cnt) { for (;x<maxn;x+=(x&-x))BIT[x]+=cnt; } int get(int x) { int sum=0; for (;x>0;x&=(x-1))sum+=BIT[x]; return sum; } int get_range(int l,int r) { return get(r)-get(l-1); } int l[maxn],r[maxn],ans[maxn]; pair<int,int> b[maxn]; int32_t main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>q; for (int i=1;i<=n;i++) { cin>>a[i].fi; a[i].se=i; } sort(a+1,a+1+n); for (int i=1;i<=q;i++) { cin>>b[i].fi>>b[i].se; l[i]=1; r[i]=n; ans[i]=0; } vector<vector<int> > queries; bool process=true; while (process) { process=false; queries.assign(n+5,vector<int>()); for (int i=1;i<=q;i++) { if (l[i]>r[i])continue; process=true; int mid=(l[i]+r[i])/2; queries[mid].push_back(i); } vector<int> vt; for (int mid=n,i=n;mid>=1;mid--) { while (i>=1&&a[i].fi>=mid) { upd(a[i].se,1); vt.push_back(a[i].se); i--; } int cnt=get_range(b[mid].fi,b[mid].se); for (auto c:queries[mid]) { int cnt=get_range(b[c].fi,b[c].se); if (cnt>=mid) { l[c]=mid+1; ans[c]=mid; } else r[c]=mid-1; } } for (auto i:vt)upd(i,-1); queries.clear(); } for (int i=1;i<=q;i++)cout<<ans[i]<<endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...