Submission #285522

#TimeUsernameProblemLanguageResultExecution timeMemory
285522lukameladzeMountains (NOI20_mountains)C++14
100 / 100
539 ms15384 KiB
# include <bits/stdc++.h> using namespace std; long long tree[1000005],j,n,ans,x,y,id,fix[300005],raod; pair <long long , long long > a[300005]; vector <long long> v; void inc(int idx, int val) { for (int i=idx; i<=n; i+=i&(-i)) { tree[i]+=val; } } long long getans (int idx) { long long pas=0; for (int i=idx; i>0; i-=i&(-i)) { pas+=tree[i]; } return pas; } int main() { cin>>n; for (int i=1; i<=n; i++) { cin>>a[i].first; a[i].second=i; } sort(a+1,a+n+1); for (int i=1; i<=n; i++) { if(a[i].first!=a[i-1].first) fix[a[i].second]=1;//cout<<i<<" "; } // cout<<endl; inc(a[1].second,1); j=n+1; for (long long i=2; i<=n; i++) { if (fix[a[i].second]==1) { j=i; break;} inc(a[i].second,1); } //cout<<j<<endl; for (long long i=j; i<=n; i++) { raod++; id=a[i].second; v.push_back(a[i].second); x=getans(id-1); y=getans(n)-getans(id); // cout<<id<<" "<<x<<" "<<y<<" "<<x*y<<endl; ans+=x*y; if (fix[a[i+1].second]==1) { for (int x=0; x<v.size(); x++) { inc(v[x], 1); } v.clear(); } // inc(a[i].second,raod); raod=0; } cout<<ans<<endl; }

Compilation message (stderr)

Mountains.cpp: In function 'int main()':
Mountains.cpp:58:28: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   58 |             for (int x=0; x<v.size(); x++)
      |                           ~^~~~~~~~~
#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...