Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<vector>
- #include<map>
- #include<algorithm>
- #include<cstdio>
- #include<cmath>
- #include<cstdlib>
- #include<cstring>
- #include<queue>
- #include<fstream>
- #include<sstream>
- #include<stack>
- #include<list>
- #include<deque>
- #include<bitset>
- #include<utility>
- #include<climits>
- #include<iomanip>
- #include<ctime>
- #include<complex>
- using namespace std;
- #define FOR(i,a,b) for (int i=(a);i<(b);i++)
- #define RFOR(i,a,b) for (int i=(b)-1;i>=(a);i--)
- #define REP(i,n) for (int i=0;i<(n);i++)
- #define RREP(i,n) for (int i=(n)-1;i>=0;i--)
- #define inf INT_MAX/3
- #define pb push_back
- #define mp make_pair
- #define all(a) (a).begin(),(a).end()
- #define SET(a,c) memset(a,c,sizeof a)
- #define CLR(a) memset(a,0,sizeof a)
- #define pii pair<int,int>
- #define pcc pair<char,char>
- #define pic pair<int,char>
- #define pci pair<char,int>
- #define VS vector<string>
- #define VI vector<int>
- #define debug(x) cout<<#x<<": "<<x<<endl
- #define MIN(a,b) (a>b?b:a)
- #define MAX(a,b) (a>b?a:b)
- #define pi 2*acos(0.0)
- #define INFILE() freopen("in0.txt","r",stdin)
- #define OUTFILE()freopen("out0.txt","w",stdout)
- #define in scanf
- #define out printf
- #define ll unsigned long long
- #define Mx 100015
- string str;
- ll len;
- ll tree[4*Mx];
- void insert(int cur , int st , int ed , int pos)
- {
- if(st==ed && st==pos)
- {
- tree[cur]++;
- return ;
- }
- int mid,lft,rgt;
- mid=(st+ed)/2;
- lft=2*cur;
- rgt=lft+1;
- if(pos<=mid)
- {
- insert(lft,st,mid,pos);
- }
- else insert(rgt,mid+1,ed,pos);
- tree[cur]=tree[lft]+tree[rgt];
- }
- int query(int cur , int st , int ed , int x , int y)
- {
- if(x>y)return 0;
- if(st==x && ed==y)
- {
- return tree[cur];
- }
- int mid,lft,rgt;
- mid=(st+ed)/2;
- lft=2*cur;
- rgt=lft+1;
- if(y<=mid)return query(lft,st,mid,x,y);
- else if(x>mid)return query(rgt,mid+1,ed,x,y);
- else
- {
- int a=query(lft,st,mid,x,mid);
- int b=query(rgt,mid+1,ed,mid+1,y);
- return a+b;
- }
- }
- int main()
- {
- int i,j,k;
- int cas,ks;
- cin>>ks;
- FOR(cas,1,ks+1)
- {
- cin>>len;
- int nn=(4*len)+5;
- //SET(tree,0);
- FOR(i,0,nn)tree[i]=0;
- cin>>str;
- // scanf("%s",str);
- int high=0;
- ll sz=0;
- ll con=0;
- ll res=0;
- for(i=0; i<len; i++)
- {
- if(str[i]=='4')
- {
- con=1;
- sz=sz+1;
- }
- else if(str[i]=='7')
- {
- if(sz==0)
- {
- con=1;
- }
- else
- {
- ll bad=0;
- bad=query(1,1,len,1,con-1 );
- res=res+( i - (2*bad) );
- insert(1,1,len,con);
- con++;
- sz=sz-1;
- }
- }
- }
- cout<<res<<endl;
- }
- return 0;
- }
- /*
- 2
- 4
- 4747
- 10
- 4447477747
- 4447774747444777
- 2
- 4
- 4747
- 10
- 4447477747
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement