| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1282788 | herominhsteve | Exercise Deadlines (CCO20_day1problem2) | C++20 | 118 ms | 11404 KiB |
#include <bits/stdc++.h>
#define el '\n'
#define FNAME "Jop"
#define allof(x) x.begin(),x.end()
#define allof1(x) x.begin()+1,x.end()
#define mset(x,n) memset(x,(n),sizeof(x))
using namespace std;
const long long MOD = (long long) 1e9 + 7;
template<class X,class Y> bool minimize(X &a,Y b){ if (a>b) {a=b; return true;} return false;}
template<class X,class Y> bool maximize(X &a,Y b){ if (a<b) {a=b; return true;} return false;}
void setup(){
ios_base::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
if (fopen(FNAME".inp","r")){
freopen(FNAME".inp","r",stdin);
freopen(FNAME".out","w",stdout);
}
}
template<typename T>
struct FenwickTree{
int n;
vector<T> bit;
FenwickTree(int N=0){
n=N;
if (n>0){
bit.resize(n+1,0);
}
}
void update(int node,T val){
while (node<=n){
bit[node]+=val;
node += (node & -node);
}
}
T getVal(int node){
T res=0;
while (node>0){
res+=bit[node];
node -= (node & -node);
}
return res;
}
T range(int l,int r){
return getVal(r) - getVal(l-1);
}
};
int n;
vector<int> a;
void init(){
cin>>n;
a.assign(n+1,0);
for (int i=1;i<=n;i++) cin>>a[i];
}
void sol(){
set<int> processed;
for (int i=1;i<=n;i++) processed.insert(-i);
vector<int> pos(n+1,0);
for (int i=n;i>=1;i--){
set<int>::iterator it = processed.lower_bound(-a[i]);
if (it==processed.end()){
cout<<-1;
exit(0);
}
pos[i] = (*it) * -1;
processed.erase(it);
}
FenwickTree<long long> bit(n);
long long res = 0;
for (int i=1;i<=n;i++){
res += bit.range(pos[i],n);
bit.update(pos[i],+1);
}
cout<<res;
}
int main(){
setup();
init();
sol();
}
컴파일 시 표준 에러 (stderr) 메시지
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
