Submission #826829

#TimeUsernameProblemLanguageResultExecution timeMemory
826829vjudge1Arranging Shoes (IOI19_shoes)C++17
100 / 100
139 ms58468 KiB
#include <bits/stdc++.h> #include "shoes.h" #define f first #define s second #define ent '\n' //#define int long long //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") //#pragma GCC optimize("Ofast,unroll-loops,fast-math,O3") //typedef long double ld; typedef long long ll; using namespace std; struct node{double x,y;}; //double len(node a,node b) //{return sqrt((a.x-b.x)*(a.x-b.y)+(a.y-b.y)*(a.x-b.y));} struct seg{ int m1,m2,sum,cnt; }; const string out[2]={"No\n","Yes\n"}; const ll dx[]={0,0,1,-1,-1,1,1,-1}; const ll dy[]={1,-1,0,0,-1,1,-1,1}; const int md=998244353; const int mod=1e9+7; const int mx=1e6+1; const int tst=1e5; const bool T=0; vector<int> g[mx]; vector<int> e[mx]; int t[mx*4]; int a[mx]; int b[mx]; int n,m,k; void upd(int v,int tl,int tr,int pos,int x){ if(tl==tr){ t[v]=x; } else{ int mid=tl+tr>>1; if(pos<=mid){ upd(v*2,tl,mid,pos,x); } else{ upd(v*2+1,mid+1,tr,pos,x); } t[v]=t[v*2]+t[v*2+1]; } } int get(int v,int tl,int tr,int l,int r){ if(tl>r || l>tr || l>r)return 0; if(tl>=l && tr<=r)return t[v]; int mid=tl+tr>>1; return get(v*2,tl,mid,l,r)+get(v*2+1,mid+1,tr,l,r); } ll count_swaps(std::vector<int> S){ n=S.size(); for(int i=1;i<=n;i++){ a[i]=S[i-1]; } ll ans=0; for(int i=n;i;i--){ if(a[i]>0){ g[a[i]].push_back(i); } else{ e[-a[i]].push_back(i); } upd(1,1,n,i,1); } for(int i=1;i<=n;i++){ if(!get(1,1,n,i,i)){ continue; } int pos=0; if(a[i]>0){ pos=e[a[i]].back(); e[a[i]].pop_back(); g[a[i]].pop_back(); ans+=get(1,1,n,i,pos-1); upd(1,1,n,pos,0); } else{ pos=g[-a[i]].back(); g[-a[i]].pop_back(); e[-a[i]].pop_back(); ans+=get(1,1,n,i+1,pos-1); upd(1,1,n,pos,0); } } return ans; }

Compilation message (stderr)

shoes.cpp: In function 'void upd(int, int, int, int, int)':
shoes.cpp:44:13: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   44 |   int mid=tl+tr>>1;
      |           ~~^~~
shoes.cpp: In function 'int get(int, int, int, int, int)':
shoes.cpp:58:12: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   58 |  int mid=tl+tr>>1;
      |          ~~^~~
#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...