#include #include #include #include #include #include using namespace std; const int MN=1e3+5;//输入条数 const int MV=35;//变量个数 map ma;//变量名对应到数字 int nma; int datan[MN]; int data[MN][MN][3]; const int MT=2e4+5;//最大节点数开4倍空间 int nu[MT];//对应到线段树节点 int nc[MV];//树应当有的最大覆盖次数 void init() { nma=0; for(int i=-10001; i<=10001; i++)//大一点处理极限情况 nu[i+10002]=i; } struct SegNode { int l,r;//所代表的区间 int addv,maxv; }; struct SegTree { SegNode segn[MT*4];//线段树上的节点,根为1 int n; void init(int nn) { n=nn; build(1,1,n);//线段从[1,1]开始 } void build(int o,int L,int R) { segn[o].l=L; segn[o].r=R; segn[o].addv=segn[o].maxv=0; if(R==L) return; int M=L+(R-L)/2; build(o*2,L,M); build(o*2+1,M+1,R); } int al,ar,av; void maintain(int o) //维护区间L,R的节点o { int ls=o*2,rs=o*2+1; segn[o].maxv=0; if(segn[o].r>segn[o].l) segn[o].maxv=max(segn[ls].maxv,segn[rs].maxv); segn[o].maxv+=segn[o].addv; } void _update(int o) { int L=nu[segn[o].l]; int R=nu[segn[o].r]; int M=nu[(segn[o].l+segn[o].r)/2]; //cout<<"up "<= 'a' && ch <= 'z'; } int nextVar() { char *buf; while (*p == ' ') p++; buf = p; while (isAlp(*p)) p++; return ma[string(buf, p - buf)]? ma[string(buf, p - buf)] : (ma[string(buf, p - buf)] = ++nma); } int nextOpt() { char *buf; while (*p == ' ') p++; buf = p; while (*p == '<' || *p == '>' || *p == '=') p++; string s(buf, p - buf); if (s == "==") return 0; if (s == "<") return 1; if (s == ">") return 2; if (s == "<=") return 3; if (s == ">=") return 4; } int nextNum() { int ans = 0, flag = 0; while (*p == ' ') p++; while (isdigit(*p) || *p == '-') { if (isdigit(*p)) ans = ans * 10 + *p - '0'; else flag = 1; p++; } return flag? -ans : ans; } } inp; int ans[MN]; int main() { //freopen("1.in","r",stdin); init(); int n; scanf("%d",&n); int v; char c=getchar(); for(int i=1; i<=n; i++) { inp.i=i; inp.read(); do { int name=inp.nextVar(); int con=inp.nextOpt(); int v=inp.nextNum(); data[i][++datan[i]][2]=name; switch (con) { case 0:data[i][datan[i]][0]=data[i][datan[i]][1]=v;break; case 1:data[i][datan[i]][0]=-10001;data[i][datan[i]][1]=v-1;break; case 2:data[i][datan[i]][0]=v+1;data[i][datan[i]][1]=10001;break; case 3:data[i][datan[i]][0]=-10001;data[i][datan[i]][1]=v;break; case 4:data[i][datan[i]][0]=v;data[i][datan[i]][1]=10001;break; } } while(inp.hasNext()); } // for(int i=1;i<=n;i++) // { // cout<<"i "<segt[data[ii][i][2]].query()) f=0; //cout<<"ii "<segt[data[jj][i][2]].query()) ff=0; //cout<<"jj "<