Submission #267039

#TimeUsernameProblemLanguageResultExecution timeMemory
267039kimbj0709Cryptography (NOI20_crypto)C++14
100 / 100
306 ms20176 KiB
#pragma GCC optimize("O3") #include<bits/stdc++.h> using namespace std; #define int long long #define maxn 300050 #define mod 1000000007 vector<int> seg(maxn*4,0); void build(int node,int start,int end){ if(start==end){ seg[node] = 1; return; } int mid = (start+end)/2; build(node*2+1,start,mid); build(node*2+2,mid+1,end); seg[node] = seg[node*2+1]+seg[node*2+2]; return; } void update(int node,int start,int end,int pos){ if(start==end&&start==pos){ seg[node]--; return; } int mid = (start+end)/2; if(pos<=mid){ update(node*2+1,start,mid,pos); } else{ update(node*2+2,mid+1,end,pos); } seg[node] = seg[node*2+1]+seg[node*2+2]; } int query(int node,int start,int end,int rangemin,int rangemax){ if(start>rangemax||end<rangemin){ return 0; } if(start>=rangemin&&end<=rangemax){ return seg[node]; } int mid = (start+end)/2; return query(node*2+1,start,mid,rangemin,rangemax)+query(node*2+2,mid+1,end,rangemin,rangemax); } int32_t main(){ ios::sync_with_stdio(0); cin.tie(0);cout.tie(0); int no_of_input; vector<int> vect1; vector<int> vect2; int input; cin >> no_of_input; for(int i=0;i<no_of_input;i++){ cin >> input; vect1.push_back(input); vect2.push_back(input); } sort(vect2.begin(),vect2.end()); build(0,0,vect1.size()-1); /*for(auto k:vect2){ cout << k << " "; } cout << "--\n";*/ for(int i=0;i<vect1.size();i++){ int temp = vect1[i]; vect1[i] = lower_bound(vect2.begin(),vect2.end(),temp)-vect2.begin(); } vector<int> fact(maxn,0); fact[1] = 1; for(int i=2;i<fact.size();i++){ fact[i] = fact[i-1]*i; fact[i] %= mod; } int sum = 0; for(int i=0;i<vect1.size();i++){ int currsmaller = 0; if(vect1[i]!=0){ currsmaller = query(0,0,vect1.size()-1,0,vect1[i]-1); } sum += fact[no_of_input-i-1]*currsmaller; sum %= mod; update(0,0,vect1.size()-1,vect1[i]); } sum++; sum %= mod; cout << sum; }

Compilation message (stderr)

Crypto.cpp: In function 'int32_t main()':
Crypto.cpp:62:18: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   62 |     for(int i=0;i<vect1.size();i++){
      |                 ~^~~~~~~~~~~~~
Crypto.cpp:68:18: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   68 |     for(int i=2;i<fact.size();i++){
      |                 ~^~~~~~~~~~~~
Crypto.cpp:73:18: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   73 |     for(int i=0;i<vect1.size();i++){
      |                 ~^~~~~~~~~~~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...