被卡常求助 TLE on #12
查看原帖
被卡常求助 TLE on #12
688783
SilverLi楼主2023/5/7 15:36
#include <bits/stdc++.h>
using namespace std;
namespace Fread {
const int SIZE = 16;
char buf[SIZE], *S, *T;
inline char getchar() {
    if (S == T) {
        T = (S = buf) + fread(buf, 1, SIZE, stdin);
        if (S == T) return '\n';
    }
    return *S++;
}
}
namespace Fwrite {
const int SIZE = 65536;
char buf[SIZE], *S = buf, *T = buf + SIZE;
inline void flush() {
    fwrite(buf, 1, S - buf, stdout);
    S = buf;
}
inline void putchar(char CHARC) {
    *S++ = CHARC;
    if (S == T) flush();
}
struct NTR {
    ~ NTR() { flush(); }
} ztr;
}
#ifdef ONLINE_JUDGE
    #define getchar Fread :: getchar
    #define putchar Fwrite :: putchar
#endif
namespace Fastio {
struct Reader {
    template<typename T>
    Reader& operator >> (T& ANYX) {
        register char CHARC = getchar();
        register T FLAG = 1;
        while (CHARC < '0' || CHARC > '9') {
            if (CHARC == '-') FLAG = -1;
            CHARC = getchar();
        }
        ANYX = 0;
        while (CHARC >= '0' && CHARC <= '9') {
            ANYX = (ANYX * 10 + (CHARC - '0'));
            CHARC = getchar();
        }
        ANYX *= FLAG;
        return *this;
    }
    Reader& operator >> (char& CHARC) {
        CHARC = getchar();
        while (CHARC == '\n' || CHARC == ' ') CHARC = getchar();
        return *this;
    }
    Reader& operator >> (char* STRINGSTR) {
        register int READLEN = 0;
        register char CHARC = getchar();
        while (CHARC == '\n' || CHARC == ' ') CHARC = getchar();
        while (CHARC != '\n' && CHARC != ' ') {
            STRINGSTR[READLEN++] = CHARC;
            CHARC = getchar();
        }
        STRINGSTR[READLEN] = '\0';
        return *this;
    }
    Reader(){}
} cin;
const char endl = '\n';
struct Writer {
    template<typename T>
    Writer& operator << (T ANYX) {
        if (ANYX == 0) { putchar('0'); return *this; }
        if (ANYX < 0) { putchar('-'); ANYX = -ANYX; }
        static int STACKTOP[45];
        int bufTOP = 0;
        while (ANYX) { STACKTOP[++bufTOP] = ANYX % 10; ANYX /= 10; }
        while (bufTOP) { putchar(STACKTOP[bufTOP] + '0'); --bufTOP; }
        return *this;
    }
    Writer& operator << (char CHARC) {
        putchar(CHARC);
        return *this;
    }
    Writer& operator << (char* STRINGSTR) {
        register int cur = 0;
        while (STRINGSTR[cur]) putchar(STRINGSTR[cur++]);
        return *this;
    }
    Writer& operator << (const char* STRINGSTR) {
        register int cur = 0;
        while (STRINGSTR[cur]) putchar(STRINGSTR[cur++]);
        return *this;
    }
    Writer(){}
} cout;
}
#define cin Fastio :: cin
#define cout Fastio :: cout
#define endl Fastio :: endl
#define m second
#define v first
const int N=3e5+5;
#define int long long
int n,k,ans;
vector<int> c;
pair<int,int> a[N];
signed main() {
	cin>>n>>k;
	for(register int i=1;i<=n;++i)	cin>>a[i].m>>a[i].v;
	for(register int i=1;i<=k;++i) {
		register int x;cin>>x;
		c.push_back(x);
	}
	sort(a+1,a+n+1,greater<pair<int,int>>());
	sort(c.begin(),c.end());
	for(register int i=1;i<=n;++i) {
		if(!k)	break;
		register auto j=lower_bound(c.begin(),c.end(),a[i].m);
		if(j==c.end())	continue;
		c.erase(j),--k;
		ans+=a[i].v;
	}
	cout<<ans;
	return 0;
}
2023/5/7 15:36
加载中...