Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- LANG: C++
- TASK: charprint
- */
- #include<bits/stdc++.h>
- using namespace std;
- typedef long long int ll;
- int const N = 300010;
- ll fenwicktree[N];
- void update(ll x){
- for(int i = x ; i <= N ; i += (i&-i)){
- fenwicktree[i]++;
- }
- }
- ll query(ll x){
- ll sum = 0;
- for(int i = x ; i >= 1 ; i -= (i&-i)){
- sum += fenwicktree[i];
- }
- return sum;
- }
- int main()
- {
- int mode;
- scanf("%d",&mode);
- char field[N];
- char key[100010];
- scanf(" %s",field);
- scanf(" %s",key);
- deque<ll> allchar[260];
- for(ll i = 0 ; field[i] != '\0'; i ++)
- allchar[field[i]-'a'].push_back(i);
- ll cost = 0;
- if(mode == 0){
- for(int i = 0 ; key[i] != '\0' ; i ++){
- char kc = key[i];
- if(allchar[kc-'a'].size() > 0){
- // printf("At %c Test cost : %d = %d + %d\n",kc,cost + allchar[kc-'a'][0],cost,allchar[kc-'a'][0]);
- cost += allchar[kc-'a'][0]+1;
- allchar[kc-'a'].pop_front();
- }
- else{
- printf("-1");
- return 0;
- }
- }
- }
- else {
- for(int i = 0 ; key[i] != '\0' ; i ++){
- char kc = key[i];
- if(allchar[kc-'a'].size() > 0){
- // printf("Char %c at %d Test cost : %d = %d + (%d - %d)\n",kc,allchar[kc-'a'][0],cost + allchar[kc-'a'][0]+1 - query(allchar[kc-'a'][0]),cost,allchar[kc-'a'][0]+1,query(allchar[kc-'a'][0]));
- cost += allchar[kc-'a'][0]+1 - query(allchar[kc-'a'][0]);
- update(allchar[kc-'a'][0]+1);
- allchar[kc-'a'].pop_front();
- // printf("Test query : ");for(int j = 0 ; j <= 20 ; j ++)printf("%d ",query(j));printf("\n");
- }
- else{
- printf("-1");
- return 0;
- }
- }
- }
- printf("%lld",cost);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement