Submission #775083

#TimeUsernameProblemLanguageResultExecution timeMemory
775083vjudge1Swap Swap Sort (CCO21_day1problem1)C++17
6 / 25
57 ms27496 KiB
#include <bits/stdc++.h> using namespace std; typedef long long lo; #define fi first #define se second #define endl "\n" #define int long long #define pb push_back #define fio() ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL) #define FOR for(int i=1;i<=n;i++) #define mid ((start+end)/2) #define ort ((bas+son)/2) const lo inf = 1000000000; const lo li = 500005; const lo mod = 1000000007; int n,m,a[li],k,flag,t,x[li],b[li],siz[li],tree[li*4]; int cev; string s; vector<int> vec[li]; vector<pair<int,int>> v; map<pair<int,int>,int> calc; inline void update(int node,int start,int end,int l,int r){ if(start>end || start>r || end<l)return ; if(start>=l && end<=r){tree[node]+=1;return ;} update(node*2,start,mid,l,r),update(node*2+1,mid+1,end,l,r); tree[node]=tree[node*2]+tree[node*2+1]; } inline int query(int node,int start,int end,int l,int r){ if(start>end || start>r || end<l)return 0; if(start>=l && end<=r)return tree[node]; return query(node*2,start,mid,l,r)+query(node*2+1,mid+1,end,l,r); } int32_t main(void){ //~ freopen("at.txt","r",stdin); //~ freopen("kat.txt","w",stdout); scanf("%lld %lld %lld",&n,&k,&t); FOR scanf("%lld",&a[i]); for(int i=1;i<=k;i++)b[i]=i; for(int i=1;i<=t;i++){ scanf("%lld",&x[i]); v.pb({b[x[i]],b[x[i]+1]}); swap(b[x[i]],b[x[i]+1]); } FOR{ vec[a[i]].pb(i); siz[a[i]]++; } for(auto go:v){ if(calc.find({go.fi,go.se})!=calc.end())continue; //~ if(calc.find({go.se,go.fi})!=calc.end())continue; int tut1=0,tut2=0; int combo=0,combo2=0; int res=0; while(tut1<siz[go.fi] && tut2<siz[go.se]){ if(vec[go.fi][tut1]<vec[go.se][tut2]){ res+=combo2; combo++; tut1++; } else{ res+=combo; combo2--; tut2++; } } //~ cout<<res<<" ()() "<<go.fi<<" ()() "<<go.se<<" ()() "<<tut1<<" ()() "<<tut2<<" ()() "<<combo<<endl; if(tut1<siz[go.fi])res+=combo2*(siz[go.fi]-tut1); else res+=combo*(siz[go.se]-tut2); calc[{go.fi,go.se}]=res; } cev=0; for(int i=n;i>=1;i--){ cev+=query(1,1,k,1,a[i]-1); update(1,1,k,a[i],a[i]); } for(int i=1;i<=k;i++)b[i]=i; for(int i=1;i<=t;i++){ int xx=b[x[i]]; int yy=b[x[i]+1]; //~ cout<<xx<<" :: "<<yy<<endl; int at=0; /* * if(calc.find({xx,yy})!=calc.end()) */ at=calc[{xx,yy}]; //~ else at=calc[{yy,xx}]; //~ cout<<at<<" ()() "<<endl; cev+=at; printf("%lld\n",cev); swap(b[x[i]],b[x[i]+1]); } return 0; }

Compilation message (stderr)

Main.cpp: In function 'int32_t main()':
Main.cpp:44:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   44 |  scanf("%lld %lld %lld",&n,&k,&t);
      |  ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:45:11: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   45 |  FOR scanf("%lld",&a[i]);
      |      ~~~~~^~~~~~~~~~~~~~
Main.cpp:48:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   48 |   scanf("%lld",&x[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...