Submission #368112

#TimeUsernameProblemLanguageResultExecution timeMemory
368112leinad2Arranging Shoes (IOI19_shoes)C++17
100 / 100
179 ms16108 KiB
#include "shoes.h" #include<bits/stdc++.h> using namespace std; int seg[800010]; void update(int id, int s, int e, int x, int v) { if(e<x||x<s)return; if(s==e) { seg[id]=v; return; } int m=s+e>>1; update(id*2, s, m, x, v); update(id*2+1, m+1, e, x, v); seg[id]=seg[id*2]+seg[id*2+1]; } int get(int id, int s, int e, int l, int r) { if(e<l||r<s)return 0; if(l<=s&&e<=r)return seg[id]; int m=s+e>>1; return get(id*2, s, m, l, r)+get(id*2+1, m+1, e, l, r); } vector<int>v[200010]; long long count_swaps(vector<int>s) { long long ans=0; int i, j; int n=s.size()/2; for(i=0;i<s.size();i++) { if(s[i]>0)v[s[i]].push_back(i); else v[-s[i]+n].push_back(i); } for(i=0;i++<2*n;)reverse(v[i].begin(), v[i].end()); for(i=0;i<s.size();i++) { if(get(1, 1, 2*n, i+1, i+1))continue; if(s[i]>0)v[s[i]].pop_back(),ans++; else v[-s[i]+n].pop_back(); if(s[i]>0) { j=v[s[i]+n].back(); v[s[i]+n].pop_back(); } else { j=v[-s[i]].back(); v[-s[i]].pop_back(); } //printf("%d %d\n", i, j); ans+=(j-i-1); ans-=get(1, 1, 2*n, i+2, j+1); update(1, 1, 2*n, j+1, 1); } return ans; }

Compilation message (stderr)

shoes.cpp: In function 'void update(int, int, int, int, int)':
shoes.cpp:13:12: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   13 |     int m=s+e>>1;
      |           ~^~
shoes.cpp: In function 'int get(int, int, int, int, int)':
shoes.cpp:22:12: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   22 |     int m=s+e>>1;
      |           ~^~
shoes.cpp: In function 'long long int count_swaps(std::vector<int>)':
shoes.cpp:31:14: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   31 |     for(i=0;i<s.size();i++)
      |             ~^~~~~~~~~
shoes.cpp:37:14: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   37 |     for(i=0;i<s.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...