제출 #1222869

#제출 시각아이디문제언어결과실행 시간메모리
1222869Tenis0206Lottery (CEOI18_lot)C++20
100 / 100
620 ms8548 KiB
#include <bits/stdc++.h> using namespace std; const int nmax = 1e4; const int qmax = 100; int n, l, q; int v[nmax + 5], k[qmax + 5]; int pd[nmax + 5], md[nmax + 5]; int c[nmax + 5]; int cnt[nmax + 5][qmax + 5]; vector<int> a; int get_val(int val) { int st = 1; int dr = a.size(); int poz = q + 1; while(st <= dr) { int mij = (st + dr) >> 1; if(a[mij - 1] >= val) { poz = mij; dr = mij - 1; } else { st = mij + 1; } } return poz; } int main() { ios::sync_with_stdio(false); cin.tie(0); #ifdef home freopen("nr.in","r",stdin); freopen("nr.out","w",stdout); #endif // home cin>>n>>l; for(int i=1;i<=n;i++) { cin>>v[i]; } cin>>q; for(int i=1;i<=q;i++) { cin>>k[i]; a.push_back(k[i]); } sort(a.begin(), a.end()); for(int i=n;i>=1;i--) { c[i] = get_val(i); } for(int d=1;d<n;d++) { for(int i=1;i+d<=n;i++) { if(v[i] == v[i + d]) { continue; } int sta = 0, dra = 0, stb = 0, drb = 0; if(i >= l) { sta = i - l + 1; dra = i; stb = i + d - l + 1; drb = i + d; } else { sta = 1; dra = i; stb = d + 1; drb = i + d; } ++pd[sta]; --pd[dra + 1]; ++md[stb]; --md[drb + 1]; } for(int i=1;i<=n;i++) { pd[i] += pd[i - 1]; md[i] += md[i - 1]; if(i + d + l - 1 <= n) { ++cnt[i][c[pd[i]]]; } if(i - d >= 1) { ++cnt[i][c[md[i]]]; } } for(int i=1;i<=n;i++) { pd[i] = md[i] = 0; } } for(int i=1;i<=n;i++) { for(int j=1;j<=q;j++) { cnt[i][j] += cnt[i][j - 1]; } } for(int i=1;i<=q;i++) { for(int j=1;j<=n-l+1;j++) { cout<<cnt[j][get_val(k[i])]<<' '; } cout<<'\n'; } return 0; }
#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...