Submission #343260

#TimeUsernameProblemLanguageResultExecution timeMemory
343260mp007mpSelling RNA Strands (JOI16_selling_rna)C++14
100 / 100
1199 ms132584 KiB
#include<bits/stdc++.h> #define S second #define F first using namespace std; typedef long long int ll; typedef pair<int,int> pii; int inf = 1e9; const int maxn = 1e5+20; vector<string> vec; vector<string> tmp; vector<string> seg[maxn*4]; string nxt(string s){ int n = s.size(); string t=s; t[n-1]++; return t; } void RVR(string&s){ int n = s.size(); for(int i=0,j=n-1;i < j;i++,j--){ swap(s[i],s[j]); } } void build(int s,int e,int v){ if(e-s<2){ seg[v].push_back(tmp[s]); return; } int mid = (s+e)/2; build(s,mid,2*v); build(mid,e,2*v+1); int l=0,r=0; while(l<seg[2*v].size() || r<seg[2*v+1].size()){ if(l>=seg[2*v].size() || (r<seg[2*v+1].size() && seg[2*v+1][r]<=seg[2*v][l])){ seg[v].push_back(seg[2*v+1][r]); r++; }else{ seg[v].push_back(seg[2*v][l]); l++; } } } int ans(int s,int e,int v,int l,int r,string ll,string rr){ if(l<=s && e<=r){ return lower_bound(seg[v].begin(),seg[v].end(),rr)-lower_bound(seg[v].begin(),seg[v].end(),ll); } if(l>=e || s>=r){ return 0; } int mid = (s+e)/2; return ans(s,mid,2*v,l,r,ll,rr)+ans(mid,e,2*v+1,l,r,ll,rr); } int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n,m; cin>>n>>m; for(int i=0;i<n;i++){ string s; cin>>s; vec.push_back(s); } sort(vec.begin(),vec.end()); for(string s:vec){ RVR(s); tmp.push_back(s); } int sz = tmp.size(); build(0,sz,1); for(int i=0;i<m;i++){ string p,q; cin>>p>>q; int l = lower_bound(vec.begin(),vec.end(),p)-vec.begin(); int r = lower_bound(vec.begin(),vec.end(),nxt(p))-vec.begin(); RVR(q); //cout<<l<<" "<<r<<"\n"; cout<<ans(0,sz,1,l,r,q,nxt(q))<<"\n"; } return 0; }

Compilation message (stderr)

selling_rna.cpp: In function 'void build(int, int, int)':
selling_rna.cpp:33:9: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::__cxx11::basic_string<char> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   33 |  while(l<seg[2*v].size() || r<seg[2*v+1].size()){
      |        ~^~~~~~~~~~~~~~~~
selling_rna.cpp:33:30: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::__cxx11::basic_string<char> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   33 |  while(l<seg[2*v].size() || r<seg[2*v+1].size()){
      |                             ~^~~~~~~~~~~~~~~~~~
selling_rna.cpp:34:7: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::__cxx11::basic_string<char> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   34 |   if(l>=seg[2*v].size() || (r<seg[2*v+1].size() && seg[2*v+1][r]<=seg[2*v][l])){
      |      ~^~~~~~~~~~~~~~~~~
selling_rna.cpp:34:30: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::__cxx11::basic_string<char> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   34 |   if(l>=seg[2*v].size() || (r<seg[2*v+1].size() && seg[2*v+1][r]<=seg[2*v][l])){
      |                             ~^~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...