답안 #48791

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
48791 2018-05-18T18:08:58 Z Pajaraja 운세 보기 2 (JOI14_fortune_telling2) C++17
35 / 100
2000 ms 51036 KB
#include <bits/stdc++.h>
#define MAXN 200007
using namespace std;
map<int,int> m;
vector<int> zh,aq[MAXN];
int a[2][MAXN],t[MAXN],seg[12*MAXN],bit[3*MAXN+7],lf[MAXN],uk;
void upd(int l,int r,int v,int val,int ind)
{
	if(l==r) {seg[ind]=val; return;}
	int s=(l+r)/2;
	if(s>=v) upd(l,s,v,val,2*ind);
	else upd(s+1,r,v,val,2*ind+1);
	seg[ind]=max(seg[2*ind],seg[2*ind+1]);
}
int nmax(int l,int r,int lt,int rt,int ind)
{
	if(l>r) return 0;
	if(l>=lt  && r<=rt) return seg[ind];
	if(r<lt || l>rt) return 0;
	int s=(l+r)/2;
	return max(nmax(l,s,lt,rt,2*ind),nmax(s+1,r,lt,rt,2*ind+1));
}
void updf(int ind) {uk++; for(int i=ind;i<=3*MAXN;i+=(i&-i)) bit[i]++;}
int fval(int ind) 
{
	int sol=0;
	for(int i=ind;i>0;i-=(i&-i)) sol+=bit[i];
	return sol;
}
int main()
{
	int n,k;
	long long sol=0;
	scanf("%d%d",&n,&k);
	for(int i=0;i<n;i++) {scanf("%d%d",&a[0][i],&a[1][i]); zh.push_back(a[0][i]); zh.push_back(a[1][i]);}
	for(int i=1;i<=k;i++) {scanf("%d",&t[i]); zh.push_back(t[i]);}
	sort(zh.begin(),zh.end());
	int sz=zh.size();
	for(int i=0;i<zh.size();i++) m[zh[i]]=i;
	for(int i=1;i<=k;i++) upd(0,sz,m[t[i]],i,1);
	for(int i=0;i<n;i++) lf[i]=nmax(0,sz,m[min(a[0][i],a[1][i])],m[max(a[0][i],a[1][i])]-1,1);
	for(int i=0;i<n;i++) aq[lf[i]].push_back(i);
	for(int i=k;i>=1;i--)
	{
		updf(m[t[i]]+1);
		for(int j=0;j<aq[i].size();j++)
		{
			int b=min(a[0][aq[i][j]],a[1][aq[i][j]]),c=max(a[0][aq[i][j]],a[1][aq[i][j]]);
			if((uk-fval(m[c]))%2==0) sol+=c;
			else sol+=b; 
		}
	}
	for(int j=0;j<aq[0].size();j++)
	{
		int b=a[0][aq[0][j]],c=a[1][aq[0][j]];
		if((uk-fval(m[c]))%2==0) sol+=b;
		else sol+=c;
	}
	printf("%lld",sol);
}

Compilation message

fortune_telling2.cpp: In function 'int main()':
fortune_telling2.cpp:39:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0;i<zh.size();i++) m[zh[i]]=i;
              ~^~~~~~~~~~
fortune_telling2.cpp:46:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int j=0;j<aq[i].size();j++)
               ~^~~~~~~~~~~~~
fortune_telling2.cpp:53:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int j=0;j<aq[0].size();j++)
              ~^~~~~~~~~~~~~
fortune_telling2.cpp:34:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d",&n,&k);
  ~~~~~^~~~~~~~~~~~~~
fortune_telling2.cpp:35:29: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  for(int i=0;i<n;i++) {scanf("%d%d",&a[0][i],&a[1][i]); zh.push_back(a[0][i]); zh.push_back(a[1][i]);}
                        ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
fortune_telling2.cpp:36:30: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  for(int i=1;i<=k;i++) {scanf("%d",&t[i]); zh.push_back(t[i]);}
                         ~~~~~^~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 5240 KB Output is correct
2 Correct 7 ms 5352 KB Output is correct
3 Correct 10 ms 5424 KB Output is correct
4 Correct 8 ms 5604 KB Output is correct
5 Correct 8 ms 5640 KB Output is correct
6 Correct 7 ms 5644 KB Output is correct
7 Correct 7 ms 5644 KB Output is correct
8 Correct 8 ms 5644 KB Output is correct
9 Correct 7 ms 5644 KB Output is correct
10 Correct 7 ms 5644 KB Output is correct
11 Correct 7 ms 5644 KB Output is correct
12 Correct 7 ms 5644 KB Output is correct
13 Correct 7 ms 5644 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 40 ms 7396 KB Output is correct
2 Correct 110 ms 9556 KB Output is correct
3 Correct 166 ms 11976 KB Output is correct
4 Correct 251 ms 13776 KB Output is correct
5 Correct 263 ms 13804 KB Output is correct
6 Correct 241 ms 13804 KB Output is correct
7 Correct 233 ms 13804 KB Output is correct
8 Correct 228 ms 14020 KB Output is correct
9 Correct 144 ms 14020 KB Output is correct
10 Correct 131 ms 14020 KB Output is correct
11 Correct 123 ms 14020 KB Output is correct
12 Correct 154 ms 14020 KB Output is correct
13 Correct 199 ms 14020 KB Output is correct
14 Correct 162 ms 14020 KB Output is correct
15 Correct 158 ms 14020 KB Output is correct
16 Correct 229 ms 14020 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 680 ms 20460 KB Output is correct
2 Correct 937 ms 27880 KB Output is correct
3 Correct 1308 ms 34152 KB Output is correct
4 Execution timed out 2027 ms 51036 KB Time limit exceeded
5 Halted 0 ms 0 KB -