Pagini recente » Cod sursa (job #833324) | Cod sursa (job #2987838) | Cod sursa (job #2269263) | Cod sursa (job #2065217) | Cod sursa (job #1255326)
#include <cstdio>
#include <iostream>
#include <vector>
#include <cstring>
#include <ctime>
#include <cassert>
#include <iomanip>
#define Nmax 1000005
using namespace std;
struct qry
{
int x,poz;
bool operator < (const qry &A) const
{
return x>A.x;
}
};
qry q[Nmax];
vector <qry> L[Nmax];
char a[Nmax];
int n,sol[Nmax],m,par[Nmax],st[Nmax],top;
inline void Solve()
{
int i,j;
vector <qry>::iterator it;
for(i=n;i;--i)
{
for(it=L[i].begin();it!=L[i].end();++it)
{
if(it->x>par[i])
{
L[i-1].push_back(*it);
}
else
{
sol[it->poz]+=i-par[i]+1;
if(par[i]-1)
L[par[i]-1].push_back(*it);
}
}
L[i].clear();
}
}
inline void Par()
{
int i;
for(i=n;i;--i)
if(a[i]=='(')
{
if(top)
par[st[top--]]=i;
}
else
st[++top]=i;
}
int main()
{
int i,x,y;
freopen ("dtcsu.in","r",stdin);
freopen ("dtcsu.out","w",stdout);
scanf("%s", (a+1));
n=strlen(a+1);
Par();
cin>>m;
for(i=1;i<=m;++i)
{
cin>>x>>y;
q[i].x=x; q[i].poz=i;
L[y].push_back(q[i]);
}
Solve();
for(i=1;i<=m;++i) cout<<sol[i]<<"\n";
return 0;
}