This documentation is automatically generated by online-judge-tools/verification-helper
View the Project on GitHub ningenMe/compro-library
/* * @title Zarts - 座標圧縮 * @docs md/util/Zarts.md */ template<class T> class Zarts{ vector<T> value; map<T,int> key; size_t sz; public: vector<int> compressed; Zarts(const vector<T> & ar, int light_flag = 0, T pre=-1) : compressed(ar.size()) { if(!light_flag) { for (auto &e : ar) key[e]; int cnt=0; for (auto &e : key) e.second = cnt++; for (int i=0;i<ar.size();++i) compressed[i]=key[ar[i]]; value.resize(key.size()); for (auto &e : key) value[e.second] = e.first; sz = cnt; } else { vector<pair<int,int>> ord(ar.size()); for(int i=0;i<ar.size();++i) ord[i]={ar[i],i}; sort(ord.begin(),ord.end()); int cnt=-1; for(int i=0;i<ar.size();++i) { if(pre < ord[i].first) cnt++; compressed[ord[i].second] = cnt; pre = ord[i].first; } sz = cnt+1; } } T get_value(int key) { return value[key]; } int get_key(T value) { assert(key.count(value)); return key[value]; } size_t size() { return sz; } };
#line 1 "lib/00-util/Zarts.cpp" /* * @title Zarts - 座標圧縮 * @docs md/util/Zarts.md */ template<class T> class Zarts{ vector<T> value; map<T,int> key; size_t sz; public: vector<int> compressed; Zarts(const vector<T> & ar, int light_flag = 0, T pre=-1) : compressed(ar.size()) { if(!light_flag) { for (auto &e : ar) key[e]; int cnt=0; for (auto &e : key) e.second = cnt++; for (int i=0;i<ar.size();++i) compressed[i]=key[ar[i]]; value.resize(key.size()); for (auto &e : key) value[e.second] = e.first; sz = cnt; } else { vector<pair<int,int>> ord(ar.size()); for(int i=0;i<ar.size();++i) ord[i]={ar[i],i}; sort(ord.begin(),ord.end()); int cnt=-1; for(int i=0;i<ar.size();++i) { if(pre < ord[i].first) cnt++; compressed[ord[i].second] = cnt; pre = ord[i].first; } sz = cnt+1; } } T get_value(int key) { return value[key]; } int get_key(T value) { assert(key.count(value)); return key[value]; } size_t size() { return sz; } };