【无标题】

#include <cstdio>
#include <algorithm>
#include <string>
using std::sort;
using std::string;
const int N = 300000 + 10, M = 300000 + 10, P = 300000 + 10;
struct Node {
    string s;
    int num;
    int type;
} a[N], b[N];
struct Edge{
	int l, r;
}e1[P];
int e[M];
bool cmp(Node x, Node y){ 
	if(x.s == y.s) return x.type < y.type;
	return x.s < y.s; 
}
bool cmp1(Node x, Node y){
	if(x.s == y.s) return x.type > y.type;
	return x.s < y.s;
}
int n, m, p;
int main() {
    scanf("%d", &n);
    int cnt = 0;
    for (int i = 1; i <= n; i++) {
        char ch[N];
        scanf("%s", ch);
        ++cnt;
        a[cnt] = { string(ch), cnt , 0};
        b[cnt] = { string(ch), cnt , 0};
    }
    sort(a + 1, a + cnt + 1, cmp);
    for (int i = 1; i <= cnt; i++) printf("%d ", a[i].num);
    putchar('\n');
    scanf("%d", &m);
    for (int i = 1; i <= m; i++) {
    	char ch[N];
    	scanf("%s", ch);
    	++cnt;
    	a[cnt] = {string(ch), i, 1};
    }
	sort(a + 1, a + cnt + 1, cmp);
	int c = 0;
	for(int i = 1; i <= cnt; i++){
		if(a[i].type == 0) c++;
		if(a[i].type == 1) e[a[i].num] = c;
	}
	for(int i = 1; i <= m; i++) printf("%d ", e[i]);
	putchar('\n');
	scanf("%d", &p);
	int cnt1 = n;
	for(int i = 1; i <= p; i++){
		char ch[N];
		scanf("%s", ch);
		++cnt1;
		b[cnt1] = {string(ch), i, 1};
		++cnt1;
		b[cnt1] = {string(ch) + "{", i, 1};
	}
	sort(b + 1, b + cnt1 + 1, cmp1);  
	c = 0;
	for(int i = 1; i <= cnt1; i++){
		if(b[i].type == 0) c++;
		if(b[i].type == 1){
			if(b[i].s[b[i].s.size() - 1] == '{') e1[b[i].num].r = c;
			else e1[b[i].num].l = c;
		}
	}
	for(int i = 1; i <= p; i++) printf("%d ", e1[i].r - e1[i].l);
	putchar('\n');
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值