Pagini recente » Cod sursa (job #145249) | Cod sursa (job #904750) | Cod sursa (job #3258406) | Cod sursa (job #1849797) | Cod sursa (job #1410896)
#include <iostream>
#include <fstream>
#include <set>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
set <pair<string ,int> > s;
int nr[1000];
string cuv,act;
int cp(string s1, string s2)
{
int l1=s1.size();
int l2=s2.size();
int i;
for(i=0; i<min(l1,l2) && s1[i]==s2[i];i++);
return i;
}
int main()
{
int tip,v1,v2,N=0;
act+='z'+2;
set <pair<string ,int> >:: iterator it;
s.insert(make_pair(act,0));
while (fin>>tip>>cuv)
{
act=cuv;
if(tip==0)
{
it=s.lower_bound(make_pair(act,0));
if(it->first==act)nr[it->second]++;
else {s.insert(make_pair(act,++N));nr[N]=1;}
}
if(tip==1)
{
it=s.lower_bound(make_pair(act,0));
nr[it->second]--;
if(it->second==0)s.erase(it);
}
if(tip==2)
{
it=s.lower_bound(make_pair(act,0));
if(it->first==act)fout<<nr[it->second]<<'\n';
else fout<<0<<'\n';
}
if(tip==3)
{
v1=v2=0;
it=s.lower_bound(make_pair(act,0));
v1=cp(it->first,act);
if(it!=s.begin())
{
it--;
v2=cp(it->first,act);
}
fout<<max(v1,v2)<<'\n';
}
}
}